随笔记录,待整理
表单认证
- 自定义WebSecurityConfigurer
新建类BrowserSecurityConfigurer
继承SpringSecurity的WebSecurityConfigurerAdapter
,并将自定义类加上@Configuration
注解作为配置类使用。 -
重写configure(HttpSecurity http)方法
http.formLogin()则为表单认证。
image.png
@Configuration
public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.formLogin()
.and()
.authorizeRequests()
.anyRequest()
.authenticated();
}
}
此时访问后台接口将会弹出表单登录页面
image.png
自定义用户认证逻辑
- 获取用户信息并处理
使用SpringSecurity的UserDetailsService
接口的loadUserByUsername(String username)
方法。该方法返回一个UserDetails
接口实现的对象。
- 自定义
UserDetailsService
实现
新建MyUserDetailsService
实现UserDetailsService
,重写loadUserByUsername
方法,并为该类打上@Component
注解使其成为Spring管理的Bean。
image.png
登录页表单的用户名将传递给username
参数接收,我们可以使用接收到的用户名去数据库里查询该用户的数据。
此时在该方法中返回的User对象是
org.springframework.security.core.userdetails.User
。该类实现了
UserDetails
接口。image.png
- 用户校验逻辑
UserDetails
接口提供以下四个方法,自己实现其逻辑:
1.boolean isAccountNonExpired();
账户是否过期。
2.boolean isAccountNonLocked();
账户是否锁定(账户是否冻结,账户可恢复)。
3.boolean isCredentialsNonExpired();
密码是否过期。
4.boolean isEnabled();
账户是否可用(用户是否被删除,被删除的账户不可恢复)。
User
类有一个7个参数的构造器,其中四个布尔参数对应上述四个校验结果。
密码加密及解密
SpringSecurity使用org.springframework.security.crypto.password.PasswordEncoder
我们调用
encode
方法将用户传过来的密码加密。SpringSecurity调用matches
方法校验密码。
若让框架按加密方式校验用户输入的密码,需要配置加密实现类。
文档说明
image.png
网友评论