Bootstrap

Spring Security(二)多用户维护配置

博主前言:本以为这个就是代替传统 jwt 的插件,没想到复杂程度如此之高。Spring Security 本身是个高度自定义化的组件,必须花时间重点学习一下。以下为个人配置学习的流程,从零到权限管理、redis嵌入等步骤。
本文基于尚硅谷的 Spring Security 教程学习,文章与原教程有不小出入,仅供参考。
B站视频链接:尚硅谷Java项目SpringSecurity+OAuth2权限管理实战教程

​ 在实际开发需求中,我们不可能只有一个用户需要维护,好在 Spring Security 有一套完整的流程支持这一操作。


一、基于内存的用户认证

  1. 配置类

​ 先来见见 Spring Security 的Config类:

@Configuration
@EnableWebSecurity // 开启 Spring Security 自定义配置
public class SecurityConfig {
}

实际上,Spring boot 项目不需要添加@EnableWebSecurity,因为其autoconfig包会默认启用依赖的相关配置。

  1. 基于内存的用户信息管理器

​ 在Config类内创建基于内存的用户信息管理器Bean

    @Bean
    public UserDetailsService userDetailsService() {
        // 基于内存的用户信息管理器
        var manager = new InMemoryUserDetailsManager();

        // 在内存中创建一个用户认证信息(UserDetails)
        // 该方法可以重复添加用户(用户名不能重复)
        manager.createUser(User.withDefaultPasswordEncoder()
                .username("user")
                .password("password")
                .roles("USER")
                .build());

        return manager;
    }

UserDetailsService的作用:储存并维护用户认证信息的服务类,其对应的用户认证信息类为UserDetails

UserDetails的作用:包含用户名、密码、权限等内容。

UserDetailsServiceUserDetails均为抽象接口,前者为不同的维护方式,后者则根据实际情况具体实现。

上述代码中的User即为 Spring Security 默认提供的UserDetails实现。

PasswordEncoder为密码的加密编码器,该对象使用默认编码(已弃用),加密编码器可以全局指定 Spring Security 自带的更好的编码器(强哈希BCryptPasswordEncoder()),亦可以自定义。

​ 此时,默认配置失效,因为我们已经重写了UserDetailsService,默认配置不再受理。


更多内容请访问:个人博客传送门

;