目录
一、项目实现
增加数据库表persistent_logins
DROP TABLE IF EXISTS `persistent_logins`;
CREATE TABLE `persistent_logins` (
`username` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
`series` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
`token` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
`last_used` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`series`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
创建bean RememberMeServices服务
@Bean
public RememberMeServices rememberMeServices(){
JdbcTokenRepositoryImpl jdbcTokenRepository = new JdbcTokenRepositoryImpl();
jdbcTokenRepository.setDataSource(dataSource);
PersistentTokenBasedRememberMeServices rememberMeServices =
new PersistentTokenBasedRememberMeServices("INTERNAL_SECRET_KEY",userService,jdbcTokenRepository);
//还可设置许多其他属性
rememberMeServices.setCookieName("kkkkk"); //客户端cookie名
return rememberMeServices;
}
将bean加入配置中
http.rememberMe().rememberMeServices(rememberMeServices()).key("INTERNAL_SECRET_KEY");
打开JdbcTokenRepositoryImpl可以看到对persistent_logins表的sql语句,表明系统会自动同步数据库。
二、测试
- 启动服务
- 浏览器访问 http://localhost:8001/getUser,弹出登陆界面,多了一个选项 Remember me on this computer.
- 勾上Remember me on this computer. 输入账号密码 admin/123,点击登陆
- 可以看到getUser接口信息
- 重启服务
- 浏览器访问 http://localhost:8001/getUser,直接得到接口信息,而无需登陆
- 看数据库persistent_logins,可以看到自动生成登陆记录。