[记录帖] Shiro 记住我 功能的有趣点

Shiro提供了一个RememberMe功能,代码如下:

usernamePasswordToken.setRememberMe(rememberMe);
subject.login(usernamePasswordToken);

看似很简单,但实际上有许多有趣的地方,我统计了一下:

 

1 两种不同cookie的存储位置不同

shrio会把用户的session生成一个对应的标识存入cookie,当rememberMe的时候,也会存储一个rememberMe的cookie。

但实际上session的cookie存在于浏览器进程里,而rememberMe的cookie存在于硬盘里。所以当用户关闭浏览器时,如果没有rememberMe,则需要重新登录。有趣的是,如果只是关闭页面而没有关闭浏览器,此时session的cookie仍然存在,用户依然不需要重新登录,直到session过期。

 

2 RememberMe的cookie也会有失效的时候

通过浏览器看rememberMe的cookie会发现是一串加密过的字符串(个人猜测里面记录了当前用户session相关的一些数据,当浏览器关闭后,shiro会先查看浏览器是否有rememberMe的cookie,如果有,则解密cookie,然后读取数据生成用户的session)。但是当后台服务器重启之后,进行解密cookie的时候会报错,此时rememberMe的cookie便会失效(个人继续猜测服务器存有解密cookie的秘钥,或者验证cookie的hash的秘钥,当服务器重启之后会生成新的秘钥,所以cookie的解密便会报错)。

 

3 shiro filter的设置

在shiro过滤的时候,我们可能这样写:

filterChainDefinitionMap.put("/**", "user");

但是将user改为authc之后,rememberMe会被拦截,也就是说,rememberMe为true,authc的url依然会要求用户需要认证。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值