shiro框架如何保持登录状态

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

最近一段时间在研究shiro框架,发现网上很少有讲在登录之后,shiro是如何保持登陆状态的,或者换句话说就是后台服务能够在你登录之后,知道你是谁,知道你有哪些权限,知道你的角色是什么


一、shiro保持登录状态的方式?

现在大部分的web项目都是采用前后端分离的架构,而保持登录状态采用的最多的方式是请求后端服务时,在请求的Header中携带token(token是在登录成功后端所返回的身份凭证)。而本文所介绍的是shiro中传统的通过cookie-session来保持登录状态的方式。

二、具体过程

1.登录系统

在首次访问登录管理系统时,后台服务会在响应头中向浏览器设置一个cookie,而cookie的内容中的JSESSIONID就是在本次http会话中,后台服务所存储的sessionId。
在这里插入图片描述在登录成功后,浏览器的每次请求都会携带这个cookie。
在这里插入图片描述这个cookie就相当于当前登录用户的身份凭证,我们可以利用这个cookie去访问当前用户在这个系统中被授权的接口。
在这里插入图片描述在不携带cookie时,请求会被shiro过滤器过滤掉。

在这里插入图片描述我在代码中将session信息存储到了redis中,session中存储了该登录用户的身份。
在这里插入图片描述
在这里插入图片描述如果将这条session记录从redis中删除,登录状态将会失效。

在这里插入图片描述

2.关闭浏览器

因为shiro中的session机制是使用进程中的cookie来保存sessionId,所以关闭浏览器后,这个进程将会消失。所以在下次打开浏览器访问该系统时,后端服务将会给浏览器设置一个新的cookie。但是redis中,上次登录所产生的session并没有被删除,所以可以继续使用上次登录所产生的sessionId来访问登录用户所被授权的接口。

3.登出系统

登出系统后,redis中会把该次会话的session删除。这个sessionId将无法访问登出用户所授权的接口。通过源码可以看到,登出操作会把session信息清空。
在这里插入图片描述

4.RememberMe功能

在上面的第二点中,我们得知当用户关闭浏览器之后,在重新打开浏览器访问之前所登录的系统,需要重新登录。
shiro提供了RememberMe功能,就是为了解决重新登录问题。
在选择开启rememberMe之后,后台服务在给浏览器的cookie中会添加rememberMe信息。
在这里插入图片描述在重新打开浏览器访问该服务时,还是会携带该rememberMe信息,而后端服务也是通过rememberMe的信息来确认登录的用户身份。
在重新打开浏览器访问该服务时,后端服务会给浏览器设置一个新的sessionId和rememberMe。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值