目录
7. 将authentication交给provider去认证
环境Spring Boot 2.6.3
本文主要讲源码,具体实现代码就不粘全了
自定义UserDetailsService +自定义认证持久层(mysql数据库认证源)
WebSecurityConfigurerAdapter
@Autowired
DataSource dataSource;//我用的druid数据源
@Autowired
UserDetailsService userService;//自定义的实现了接口的类(没粘出来)
@Bean
public PersistentTokenRepository persistentTokenRepository(){
JdbcTokenRepositoryImpl tokenRepository = new JdbcTokenRepositoryImpl();
tokenRepository.setDataSource(dataSource);//设置数据源
return tokenRepository;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.
...
//记住密码
.and().rememberMe()
// .rememberMeParameter("remember-me")//设置前端 表单记住密码的name
.tokenRepository(persistentTokenRepository())//设置持久层
.tokenValiditySeconds(60*60*24*7)//设置token有效期
// 设置 userDetailsService , 和 认证过程的同样,RememberMe 有专门的 RememberMeAuthenticationProvider ,也就意味着须要 使用UserDetailsService 加载 UserDetails 信息
.userDetailsService(userService)
}
Mysql(因为JdbcTokenRepositoryImpl 底层是把token保存在数据库所以要先建表)
create table persistent_logins (username varchar(64) not null, series varchar(64) primary key,token varchar(64) not null, last_used timestamp not null)
1. 登录成功后判断是否开启记住密码
UsernamePasswordAuthenticationFilter-> doFilter()-> attemptAuthentication(request, response);//登录验证