SpringSecurity中的UserDetails和UserDetailsService接口详解

 更新时间:2023年11月22日 10:03:40   作者:杜小舟  
这篇文章主要介绍了SpringSecurity中的UserDetails和UserDetailsService接口详解,UserDetailsService 在 Spring Security 中主要承担查询系统内用户、验证密码、封装用户信息和角色权限,需要的朋友可以参考下

UserDetails

UserDetails 在 Spring Security 框架中主要担任获取用户信息的接口,通过该接口就能拿到用户的信息和验证用户的信息,这些信息在下面的方法中会有讲述。

UserDetails 接口中各个方法详解

方法名作用
Collection<? extends GrantedAuthority> getAuthorities()授予用户的权限
String getPassword()用户的密码(当前密码是经过加密后的)
String getUsername()用户名
boolean isAccountNonExpired()用户的账号是否过期
true 未过期 false 已过期
boolean isAccountNonLocked()用户的账号是否被锁定
true 未被锁定 false 被锁定
boolean isCredentialsNonExpired()用户的凭据(密码)是否已过期
true 未过期 false 已过期
boolean isAccountNonExpired()用户是否启用
true 启用 false 禁用

UserDetailsService

UserDetailsService 在 Spring Security 中主要承担查询系统内用户、验证密码、封装用户信息和角色权限。

大白话就是你写一个实现类实现 UserDetailsService 接口,在这个实现类中去查询数据库中的用户,并封装成一个实现了 UserDetails 接口的实体类模型。

UserDetailsService 具体操作

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.security.mysql.dao.UserDao;
import com.security.mysql.entity.UserEntity;
import com.security.user.UserDetailsInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Component;


@Component
@Slf4j
public class UserDetailsServiceImpl implements UserDetailsService {

	// TODO 这里改成你自己的服务或者Dao查询
    @Autowired
    private UserDao userDao;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        log.info("进入 loadUserByUsername ...");
        // TODO 查询系统内的用户
        LambdaQueryWrapper<UserEntity> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(UserEntity::getUsername, username);
        UserEntity userEntity = userDao.selectOne(wrapper);
        if (userEntity == null) {
            // 未查询到用户
            throw new RuntimeException("not find user");
        }

		// TODO 封装成实现了 UserDetails 接口的实体类模型
        return UserDetailsInfo.builder()
                .id(userEntity.getId())
                .username(userEntity.getUsername())
                .password(userEntity.getPassword())
                .build();
    }

}

UserDetailsService 方法介绍

方法名作用
UserDetails loadUserByUsername(String username)根据用户名加载用户信息

到此这篇关于SpringSecurity中的UserDetails和UserDetailsService接口详解的文章就介绍到这了,更多相关UserDetails和UserDetailsService接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • idea报错java: 非法字符: ‘\ufeff‘的解决步骤以及说明

    idea报错java: 非法字符: ‘\ufeff‘的解决步骤以及说明

    这篇文章主要介绍了idea报错java:非法字符:\ufeff的解决步骤以及说明,文章详细解释了为什么在Java中会出现\ufeff错误,这是由于BOM字符被认为是非法字符导致的,通过示例代码将解决的过程介绍的非常详细,需要的朋友可以参考下
    2025-05-05
  • java判断字符串String是否为空问题浅析

    java判断字符串String是否为空问题浅析

    这篇文章主要介绍了java判断字符串String是否为空问题,有需要的朋友可以参考一下
    2014-01-01
  • Springboot整合logback的详细教程

    Springboot整合logback的详细教程

    这篇文章主要介绍了Springboot整合logback的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • SpringBoot集成百度AI实现人脸识别的项目实践

    SpringBoot集成百度AI实现人脸识别的项目实践

    本文主要介绍了SpringBoot集成百度AI实现人脸识别的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • spring cloud 使用oauth2 问题汇总

    spring cloud 使用oauth2 问题汇总

    这篇文章主要介绍了spring cloud 使用oauth2 问题汇总,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • springmvc使用REST出现:Request method 'PUT' not supported问题

    springmvc使用REST出现:Request method 'PUT' not sup

    这篇文章主要介绍了springmvc使用REST出现:Request method 'PUT' not supported问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • JavaWeb中struts2实现文件上传下载功能实例解析

    JavaWeb中struts2实现文件上传下载功能实例解析

    这篇文章主要介绍了JavaWeb中struts2文件上传下载功能的实现,在Web应用系统开发中,文件上传和下载功能是非常常用的功能,需要的朋友可以参考下
    2016-05-05
  • Springboot中的Controller解析

    Springboot中的Controller解析

    这篇文章主要介绍了Springboot中的Controller解析,Controller是SpringBoot的基本组件,也是MVC结构的组成部分,其作用是将用户提交来的请求通过URL匹配,分发给不同的接收器,该接收器会对其进行相应处理,然后返回处理结果,需要的朋友可以参考下
    2023-09-09
  • 深入理解Spring事务原理

    深入理解Spring事务原理

    这篇文章主要带领大家深入理解Spring事务原理,Spring事务的传播属性
    2016-07-07
  • Java项目常见工具类详解

    Java项目常见工具类详解

    这篇文章主要为大家总结了平时在Java项目中使用的工具类:JWT工具类、MD5工具类、视频点播工具类、公共常量工具类、日期操作工具类、Http客户端工具类和获取IP工具类。需要的可以参考一下
    2021-12-12

最新评论