在日常的上网中,各种网站需要登陆之后才能使用,而频繁的输入用户名和密码也是够令人烦恼的。那么自动登录就解决了这一痛点,就比如登录qq邮箱时就有这一选项。
今天正好学到使用spring security可以实现这一功能,因此前来记录一下。
简而言之,当用户在第一次登陆之后spring security会生成一个加密的字符串存放在cookie中,同时在数据库中也会存放加密字符串和用户的信息加密字符串。等下一次访问时就会比较cookie与数据库之间的数据,如果一致那么就能免去登录了。
具体代码实现
实际上在数据库中存放信息的表security能自动帮我们生成,这里我们自己手动建表不用自动生成。
CREATE TABLE `persistent_logins` (
`username` varchar(64) NOT NULL,
`series` varchar(64) NOT NULL,
`token` varchar(64) NOT NULL,
`last_used` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP,
PRIMARY KEY (`series`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
接下来在配置类中注入数据源并且配置对象
//注入数据源
@Autowired
private DataSource dataSource;
//配置对象
@Bean
public PersistentTokenRepository persistentTokenRepository() {
JdbcTokenRepositoryImpl jdbcTokenRepository = new JdbcTokenRepositoryImpl();
jdbcTokenRepository.setDataSource(dataSource);
return jdbcTokenRepository;
}
在 protected void configure(HttpSecurity http) 方法中配置如下,重点就是rememberMe()方法
然后在前端登录页使用一个单选框来设置需不需要开启自动登录
重点是这个checkbox的name属性必须设置为remember-me,这样spring security才能自动识别
此时登陆第一次之后,就算关闭浏览器或者是将服务器重启,只要在设置的有效时间之内再次发起请求都不需要再次登录了。