提示:写完文章后,目录可以自动生成。 如何生成可以引用右侧的帮助文档
文章目录序言一、shiro保持登录状态的方式? 二、具体流程1 .登录系统2 .关闭浏览器3 .注销系统4 .内存me功能
前言我最近研究了shiro的框架,登录后,我会知道shiro是如何保持登录状态的,也就是说后台服务登录后,你是谁,你有什么权限,角色是什么
一、shiro如何保持登录状态? 目前,大多数web项目都采用前端和后端分离的体系结构,但保持登录状态的最多方法是在请求后端服务时将Token携带到请求的Header上。 Token是从成功登录的后端返回的凭据。 本文介绍了shiro传统的cookie-session如何保持登录状态。
二、具体流程1 .登录系统第一次访问登录管理系统时,后台服务会在响应标头中设置cookie浏览器。 cookie内容中的JSESSIONID是后台服务在这次http会话中保存的sessionId。
登录成功后,每次浏览器请求都会携带此cookie。
此cookie相当于当前登录用户的身份凭证,我们可以使用此cookie访问当前用户在此系统上获得授权的界面。
如果不携带cookie,请求将按shiro过滤器过滤。
在代码中将session信息保存到redis,并将登录用户的id保存到session。
从redis中删除此session记录将禁用登录状态。
2 .关闭浏览器shiro的session机制使用进程的cookie保存sessionId,因此关闭浏览器后该进程将消失。 因此,在下次打开浏览器访问系统时,后端服务会在浏览器中设置新的cookie。 但是,redis没有删除上次登录生成的session,因此您可以继续使用上次登录生成的sessionId访问登录用户允许的界面。
3 .注销系统后,该会话的会话将从redis中删除。 此sessionId将无法访问注销的用户允许的界面。 从源代码中可以看到,注销操作将使session信息为空。
4.RememberMe功能在上述第二点中,我们发现用户关闭浏览器后,在重新打开浏览器进行访问之前登录的系统需要再次登录。
shiro提供了RememberMe功能来解决重新登录问题。
选择打开rememberMe后,后台服务会将rememberMe信息添加到指向浏览器的cookie中。
重新打开浏览器访问服务时,将携带rememberMe信息,后端服务也将通过rememberMe信息验证登录用户的身份。
重新打开浏览器并访问服务时,后端服务会为浏览器设置新的会话id和删除器me。