【Shiro】shiro的Session管理
【Shiro】shiro的Session管理
- 1. Session管理介绍
- 2. JavaSE环境下
- 3. JavaEE环境下
- 4. Session监听
- 5. Session检测
1. Session管理介绍
shiro作为⼀款安全管理框架,对状态保持有很强的需要。
⽐如最常⽤的⽤户认证,就必需状态的保持,以及其他的⼀些功能实现的需要。
【shiro需要:认证中的 记住我中的⽤户名 正式登陆的⽤户名 】
【 开发者需要:其他功能中需要存⼊session的值 】
shiro提供了⼀整套session管理⽅案.
1. shiro的session⽅案和任何容器⽆关
(如servlet容器);
2. javaSE也可以使⽤;相关组件都是pojo对ioc极其友好(⽅便的管理对象和满⾜依赖关系,定制参数)
3. 可以⽅便的扩展定制存储位置(内存,缓存,数据库
等)
4. 对web透明
⽀持:⽤了shiro的session后,项⽬中关于session的代码完全不⽤任何改动
5. 提供了全⾯的session监听
机制,和session检测
机制,对session可以细粒度操作
即,使⽤了shiro后,采⽤shiro的session⽅案是最优的⽅案。
2. JavaSE环境下
shiro 的session管理⽅案,可以在javaSE中使⽤,但是实⽤价值不⼤。毕竟session对应的是会话管理
Subject subject = SecurityUtils.getSubject();
//获取session
Session session = subject.getSession();
//session超时时间,单位:毫秒;0,⻢上过期;正数,则空闲对应毫秒后过期;负数,则不会过期
session.setTimeout(10000);
//session存、取值
session.setAttribute("name","siyi"); session.getAttribute("name");
//获取sessionID
getSession().getId();
// 销 毁 session session.stop();
原理,核⼼对象:
1.SimpleSession
Session的实现类,完成session基本功能。2.SimpleSessionFactory
⽣产SimpleSession3.SessionDAO
默认的实现类:MemorySessionDAO,由SessionManager创建,
负责存储所有session对象,存储位置:内存4.DefaultSessionManager
由SecurityManager创建,负责创建、管理SessionFactory和SessionDAO。
//核⼼类演示: ( ops:实际开发不⽤⼿动创建,shiro会初始化 )
//通过SecurityManager 获得 SessionManager
DefaultSessionManager sessionManager = (DefaultSessionManager)securityManager.getSessionManager();
//通过SessionManager获得SessionFactory
SimpleSessionFactory sessionFactory = (SimpleSessionFactory) sessionManager.getSessionFactory();
//通过SessionManager获得SessionDAO
MemorySessionDAO sessionDAO = (MemorySessionDAO)sessionManager.getSessionDAO();
//通过SessionFactory获得Session
SimpleSession session1 = (SimpleSession) sessionFactory.createSession(null);
//通过Session做具体操作session1.setAttribute("name","zhangsan"); System.out.println(session1.getAttribute("name"));
3. JavaEE环境下
在spring配置文件中增加session管理相关配置。
<!-- 增加session管理相关配置 -->
<!-- 会话Cookie模板 默认可省-->
<bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie"><!-- cookie的 key="sid" --><property name="name" value="JSESSIONID"/><!-- 只允许http请求访问cookie --><property name="httpOnly" value="true"/><!-- cookie过期时间,-1:存活⼀个会话 ,单位:秒 ,默认为-1--><property name="maxAge" value="-1"/>
</bean><bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager"><!-- 默认值和配置中给出的⼀致,所bean:sessionIdCookie 可以省略 --><property name="sessionIdCookie" ref="sessionIdCookie"/><!-- session全局超时时间, 单位:毫秒 ,30分钟 默认值为1800000--><property name="globalSessionTimeout" value="1800000"/>
</bean><!-- 将sessionManager关联到SecurityManager -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">...<!-- 增加配置sessionManager --><property name="sessionManager" ref="sessionManager"/>
</bean>
4. Session监听
session有三个核⼼过程:创建、过期、停⽌
过期: session的默认过期时间为30分钟。通过⽐对最近⼀次使⽤时间和当前使⽤时间判断 session不会⾃动报告过期,需检测器检测时,或再次访问时,才可以识别是否过期并移除。
停⽌: ⽤户主动logout
;主动调⽤session.stop()
; 两种情况会将session标志为停⽌状态。
// 定义监听类 exentends SessionListenerAdapter
public class MySessionListener extends SessionListenerAdapter{//当有session创建时 触发@Overridepublic void onStart(Session session) { System.out.println("session:"+session.getId()+" start");}//当有session停⽌时 触发@Overridepublic void onStop(Session session) { System.out.println("session:"+session.getId()+" stop");}//当有session过期时 触发// 但不会主动触发,需要再次访问时,即⼜要使⽤session时才会发现session过期,并触发。@Overridepublic void onExpiration(Session session) { System.out.println("session:"+session.getId()+" expired");}
}
配置监听类,关联给SessionManager
<bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">...<property name="sessionListeners"><list><bean class="com.siyi.listener.MySessionListener"></bean></list></property>...
</bean>
5. Session检测
⽤户如果没有主动退出登录,只是关闭浏览器,则session是否过期⽆法获知,也就不能停⽌session。 为此,shiro提供了session的检测机制,可以定时发起检测,识别session过期 并停⽌session。
<!-- sessionManager默认开启session检测机制 -->
<bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">...<!-- 开启检测器,默认开启 --><property name="sessionValidationSchedulerEnabled" value="true"/><!--- 检测器运⾏间隔,单位:毫秒 默认1⼩时//检测到过期后,会直接将session删除protected void afterExpired(Session session) { if (isDeleteInvalidSessions()) {delete(session);}}--><property name="sessionValidationInterval" value="3600000"/>...
</bean>
如上,通过检测器,定时的检测session,并及时移除⽆效session,释放资源。
【Shiro】shiro的Session管理相关推荐
- shiro教程:session管理
当我们项目需要进行session管理的时候,我们就需要进行相关的配置了,下面讲一下步骤 1.配置文件配置 首先我们需要对sessionManager进行相关的配置. <!-- 会话管理器 sta ...
- shiro集成 spring-加密md5配置--权限管理-shiro中的session 等等!!
目录 1.shiro集成 spring 1.1 导入依赖的包 1.2 web.xml配置 2. 开发自定义Realm 2.1 创建测试数据表 2.3 编写后台支持服务 2.4 编写自定义的Realm ...
- 【Shiro】六、Apache Shiro Session管理
1.Session的介绍 关于Session 会话:从启动一个Session到关闭这个Session作为一个会话,是对客户端和服务器端交互的一种封装,带有时效性 会话的产生: 一般从容器中产生 Web ...
- SpringMvc 集成 shiro 实现权限角色管理-maven
2019独角兽企业重金招聘Python工程师标准>>> SpringMvc 集成 shiro 实现权限角色管理 1.项目清单展示 2.项目源码解析 1)spring-context ...
- springmvc集成shiro后,session、request姓汪还是姓蒋 ?
1. 疑问 我们在项目中使用了spring mvc作为MVC框架,shiro作为权限控制框架,在使用过程中慢慢地产生了下面几个疑惑,本篇文章将会带着疑问慢慢地解析shiro源码,从而解开心里面的那点小 ...
- Spring Boot 2.X + Shiro 优雅解决 session 跨域问题
一.跨域问题 web 开发中跨域问题是一个老生常谈的问题,根本原因是浏览器基于安全原因考虑对非同源的脚本操作和 ajax 访问进行了限制,介绍的文章网上有很多,这里不做赘述. 二.解决方案 跨域问题有 ...
- springmvc集成shiro后,session、request姓汪还是姓蒋?
1. 疑问 我们在项目中使用了spring mvc作为MVC框架,shiro作为权限控制框架,在使用过程中慢慢地产生了下面几个疑惑,本篇文章将会带着疑问慢慢地解析shiro源码,从而解开心里面的那点小 ...
- Shiro角色和权限管理
Shiro角色和权限管理 在resources下创建shiro.ini文件,用于存储数据,也可以将数据存于数据库,这里我采用shiro.ini文件,内容如下: [users] zhangsan=z3, ...
- Shiro Shiro Web Support and EnvironmentLoaderListener
Shiro Shiro Web Support 主要参考: http://shiro.apache.org/web.html 还有涛哥的 作为资源控制访问的事情,主要使用在网络后台方面,所以了解了本地 ...
最新文章
- 别找了 这就是适合入门的第一本算法书
- 用户空间增加、缩减内存
- zentao这php,ZenTaoPHP后面计划
- 阿里云混合云的政企上云新路径
- linux(CentOS)下安装mongodb
- jaxb报错_JAXB做错了; 尝试Xembly
- Jakarta Struts应用的七个经验
- 面试者为何从来得不到反馈?
- python决策树预测模型_「数据挖掘入门系列」数据挖掘模型之分类与预测 - 决策树...
- 怎样才能称得上一个好运维
- 网站访问计数器 php,用PHP生成访客计数器
- PHP调用powershell权限,浏览器挂起执行运行Powershell的PHP
- python微博爬虫程序_基于Python的新浪微博爬虫程序设计与研究
- Django模板 render_to_string与render
- 微信开放平台Android常见问题
- 基于RFM的用户画像分析
- 苹果开发者账号网页版续费失败支付报错解决办法
- 使用exe4j把jar转换成exe文件时,报错java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Composite
- 亚马逊10000人大裁员已启动!谷歌绩效强制打低分跟风「毕业潮」
- Unity3D制作巡逻兵小游戏
热门文章
- 什么是 Web 3.0?定义、功能和示例
- Stanford CS224n 第一讲:深度自然语言处理
- 【PHP】linux搭建PHP运行环境
- 小熊饼干、大白兔也遭遇小浩路过
- 01. Java8-Lambada 表达式
- PostGIS 快速入门
- 这是一份华为云私有云解决方案2017年的成绩单
- [AHK]为通达信标记文字窗口的按钮增加热键
- 怎样用matlab把视频转gif动画,Matlab制作视频并转换成gif动态图的两种方法
- 【2020年保研记】浙大软院+中科院信工所+北师大人工智能学院+华中科技网安学院+四川大学网安学院+中山大学系统科学与工程学院