SpringSecurity的remember me记住我功能,即下次访问系统的时候无需再次登录,当使用这个功能的时候SpringSecurity会生成一个令牌,令牌一方面保存在数据库中,另一方面生成一个叫remember-me的cookie保存在客户端。之后客户端访问项目时自动携带令牌,不登陆即可完成认证。
1.创建一个配置类,因为需要连接数据库,所以需要注入DataSource属性。
2.创建PersistentTokenRepository工具类,可以让SpringSecurity连接数据库,通过@Bean注入到容器中去
3.为SpringSecurity自带的令牌控制器设置数据源
@Configuration public class RememberMeConfig { @Autowired private DataSource dataSource; //令牌Repository @Bean public PersistentTokenRepository getPersistentTokenRepository(){ //为spring security自带的令牌控制器设置数据源 JdbcTokenRepositoryImpl jdbcTokenRepository = new JdbcTokenRepositoryImpl(); jdbcTokenRepository.setDataSource(dataSource); //自动创建令牌表,只有第一次启动时需要,第二次启动时注释掉 //jdbcTokenRepository.setCreateTableOnStartup(true); return jdbcTokenRepository; } }
4.在SecurityConfig中配置
//记住我的配置 http.rememberMe() .userDetailsService(userDetailsService)//登录逻辑交给哪个对象 .tokenRepository(persistentTokenRepository)//令牌repository .tokenValiditySeconds(60);//cookie保存时间。单位秒
5.在前端页面加上记住我的复选框
<input type="checkbox" name="remember-me" value="true"/>记住我</br>
那么必须是remember-me,SpringSecurity才知道我们这个是记住我这个功能