页面登录时添加记住我选项
配置:
在JdbcTokenRepositoryImpl
类中定义了创建表的语句,可以拷贝出来去数据库执行
CREATE TABLE persistent_logins (
username VARCHAR (64) NOT NULL,
series VARCHAR (64) PRIMARY KEY,
token VARCHAR (64) NOT NULL,
last_used TIMESTAMP NOT NULL
)
登陆,并勾选记住我,这里我们配置的过期时间是30s
登陆成功,可以看到cookie中多了remember-me字段的信息,查看数据库刚才建好的表:
重启服务,直接访问数据,成功获取,并不需要再次登陆,当cookie中remember-me过期消失之后,再次重启服务,访问就需要登陆
再登录成功时,执行成功处理器之前会执行:rememberMeServices.loginSuccess()
将token存入数据库,同时写入cookie
登陆成功之后,重启服务,直接访问数据接口,进入RememberMeAuthenticationFilter
,先判断SecurityContext中是否有认证过的信息,由于没有登陆不存在Authentication
,所以就执行下面的rememberMeServices.autoLogin()
接下来进入到PersistentTokenBasedRememberMeServices
在这里获取cookie中的token信息,使用token中的series,调用tokenRepository.getTokenForSeries()
去数据查询响应的token,最后根据查询到的token,获取到用户名,执行loadUserByUsername()
方法,登陆成功后,回到RememberMeAuthenticationFilter
:
将用户信息存到session,自动登陆成功