博主前言:本以为这个就是代替传统 jwt 的插件,没想到复杂程度如此之高。Spring Security 本身是个高度自定义化的组件,必须花时间重点学习一下。以下为个人配置学习的流程,从零到权限管理、redis嵌入等步骤。
本文基于尚硅谷的 Spring Security 教程学习,文章与原教程有不小出入,仅供参考。
B站视频链接:尚硅谷Java项目SpringSecurity+OAuth2权限管理实战教程
在实际开发需求中,我们不可能只有一个用户需要维护,好在 Spring Security 有一套完整的流程支持这一操作。
一、基于内存的用户认证
- 配置类
先来见见 Spring Security 的Config
类:
@Configuration
@EnableWebSecurity // 开启 Spring Security 自定义配置
public class SecurityConfig {
}
实际上,Spring boot 项目不需要添加
@EnableWebSecurity
,因为其autoconfig
包会默认启用依赖的相关配置。
- 基于内存的用户信息管理器
在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
的作用:包含用户名、密码、权限等内容。
UserDetailsService
与UserDetails
均为抽象接口,前者为不同的维护方式,后者则根据实际情况具体实现。上述代码中的
User
即为 Spring Security 默认提供的UserDetails
实现。
PasswordEncoder
为密码的加密编码器,该对象使用默认编码(已弃用),加密编码器可以全局指定 Spring Security 自带的更好的编码器(强哈希BCryptPasswordEncoder()
),亦可以自定义。
此时,默认配置失效,因为我们已经重写了UserDetailsService
,默认配置不再受理。
更多内容请访问:个人博客传送门