欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

史上最简单的Spring Security教程(十三):动态用户

程序员文章站 2022-06-02 23:25:55
...

 

前面我们讲过的例子,都是在配置文件中配置的用户信息,包括用户名、密码、角色等,而这些,会被初始化到InMemoryUserDetailsManager中,即存储在内存中。

但是,在实际的业务场景中,不可能只有一个用户,更不可能用户信息都是固定的,而是动态的,需要从存储的地方获取,如数据库。

首先,我们把用户信息存储在数据库中,创建数据库 springsecuritylearning,编码方式 utf8mb4,排序规则 utf8mb4_bin

史上最简单的Spring Security教程(十三):动态用户

然后定义用户表 SYS_USER

create table SYS_USER
(
   ID                   varchar(32) not null comment '主键',
   NAME                 varchar(60) comment '姓名',
   USERNAME              varchar(60) comment '账号',
   PASSWORD             varchar(100) comment '密码',
   AGE                  int comment '年龄',
   STATE                int comment '状态',
   SORT                 int comment '顺序号',
   GMT_CREATE           timestamp default CURRENT_TIMESTAMP comment '新增时间,默认当前时间,不随数据改变而改变',
   GMT_MODIFIED         timestamp default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '修改时间,默认当前时间,随数据改变而改变',
   primary key (ID)
);
​
alter table SYS_USER comment '系统用户';

 

然后,自定义 UserDetailsService,其核心就是从数据库中获取用户信息。

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    SysUser sysUser = this.userDao.getByUsername(username);
​
    UserDetails user = User.builder()
        .username(sysUser.getUsername())
        .password(sysUser.getPassword())
        .roles("User")
        .build();
​
    return user;
}

 

修改 Spring Security 配置,配置 UserDetailsService 为我们刚才创建的自定义实现。另外,密码加密方式使用的是 BCryptPasswordEncoder

......    
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.userDetailsService(customJdbcUserDetailsService()).passwordEncoder(new BCryptPasswordEncoder());
}
​
private UserDetailsService customJdbcUserDetailsService() {
    CustomJdbcUserDetailsService userDetailsService = new CustomJdbcUserDetailsService();
    userDetailsService.setUserDao(userDao);
    return userDetailsService;
}
......

 

然后,把配置文件中,关于用户配置的信息全部删除掉。

启动系统,使用原用户名、密码登录,可以成功登录,动态用户改造成功。

史上最简单的Spring Security教程(十三):动态用户

至此,动态用户实现完成。

其它详细源码,请参考文末源码链接,可自行下载后阅读。

 

源码

 

github

 

https://github.com/liuminglei/SpringSecurityLearning/tree/master/13

 

gitee

 

https://gitee.com/xbd521/SpringSecurityLearning/tree/master/13

 

 

 

史上最简单的Spring Security教程(十三):动态用户

回复以下关键字,获取更多资源

 

SpringCloud进阶之路 | Java 基础 | 微服务 | JAVA WEB | JAVA 进阶 | JAVA 面试 | MK 精讲

史上最简单的Spring Security教程(十三):动态用户

 

 

 

笔者开通了个人微信公众号【银河架构师】,分享工作、生活过程中的心得体会,填坑指南,技术感悟等内容,会比博客提前更新,欢迎订阅。

史上最简单的Spring Security教程(十三):动态用户