前言:
项目需要用户重启浏览器后,还能记录用户登录状态。项目鉴权使用了shiro框架,发现rememberMe功能刚好可以实现需求。按照教程把功能实现后,顺带阅读了一下源码,在这里做下阅读记录。
必要知识:
众所周知,前端访问后端接口后,后端会向前端cookie写个sessionid作为会话标记。session有效期为这次关闭浏览器,所以只要重启时,保存下来,就能实现记录状态的功能了。
在shiro提供的SecurityManager中,网站开发,我们常用DefaultWebSecurityManager,它继承于DefaultSecurityManager。DefaultSecurityManager是shiro自带实现的最基础但已直接可用的SecurityManager,它包含了shiro所有主要的鉴权流程。
shiro如何记录用户状态:
用户登陆:
public Subject login(Subject subject, AuthenticationToken token) throws AuthenticationException {
...
onSuccessfulLogin(token, info, loggedIn);
return loggedIn;
}
复制代码
在用户登录成功后,会有一个后置处理:
protected void onSuccessfulLogin(AuthenticationToken token, AuthenticationInfo info, Subject subject) {
rememberMeSuccessfulLogin(token, info, subject);
}
复制代码
它的内部,就是来向前端cookie中记录当前登陆状态,
protected void rememberMeSuccessfulLogin(AuthenticationToken token, AuthenticationInfo info, Subject subject) {
RememberMeManager rmm = getRememberMeManager();
if (rmm != null) {
try {
rmm.onSuccessfulLogin(subject, token, info);
...
}
复制代码
DefaultWebSecurityManager在构造时,默认会设置一个RememberMeManager
public DefaultWebSecurityManager() {
super();
...
setRememberMeManager(new CookieRememberMeManager());
}
复制代码

本文介绍了Shiro框架的RememberMe功能,用于在用户重启浏览器后保持登录状态。通过分析源码,详细讲解了Shiro如何记录和重新读取用户状态,包括在用户登录成功后设置RememberMeManager,使用cookie保存用户凭证组信息,并使用AES加密保证安全。同时,文章讨论了RememberMe与普通登录的差别,以及如何通过不同的拦截器配置来区分这两种情况。
最低0.47元/天 解锁文章
3240

被折叠的 条评论
为什么被折叠?



