2017.2.9 开涛shiro教程-第十章-会话管理(一)

原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398

根据下载的pdf学习。

 

第十章 会话管理(一)

10.1 会话

shiro提供的会话可以用于JavaSE/JavaEE环境,不依赖于任何底层容器,可以独立使用,是完整的会话模块。即直接使用shiro的会话管理替换如web容器的会话管理。

获取会话及其相关信息的一些代码:

 1 login("classpath:shiro.ini", "zhang", "123");
 2 Subject subject = SecurityUtils.getSubject();
 3 
 4 //获取session对象,如果当前没有session对象,则创建一个
 5 Session session = subject.getSession();
 6 //同上
 7 Session session = subject.getSession(true);
 8 //获取session对象,如果当前没有session对象,返回null
 9 Session session = subject.getSession(false);
10 
11 //获取当前会话的唯一id
12 session.getId();
13 
14 //获取当前Subject的主机地址
15 session.getHost();
16 
17 //获取/设置当前session的过期时间,默认为会话管理器的全局过期时间
18 session.getTimeout();
19 session.setTimeout(毫秒);
20 
21 //获取会话启动时间
22 session.getStartTimestamp();
23 //获取会话最后访问时间
24 session.getLastAccessTime();
25 //更新会话最后访问时间
26 session.touch();
27 //销毁会话
28 session.stop();
29 
30 //设置/获取/删除会话属性,在整个会话范围都可以对这些属性操作
31 session.setAttribute("key", "123");
32 Assert.assertEquals("123", session.getAttribute("key"));
33 session.removeAttribute("key");
View Code

 

10.2 会话管理器 sessionManager

shiro提供了三个默认实现:

(1)DefaultSessionManager:用于JavaSE环境

(2)ServletContainerSessionManager:用于Web环境,直接使用servlet容器的会话。

(3)DefaultWebSessionManager:用于web环境,自己维护会话。

我的项目中用的(3)。globalSessionTimeout是会话的全局过期时间,单位ms。可以单独设置每个session的timeout属性,来为每个session设置超时时间。

1 <bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
2     <property name="globalSessionTimeout" value="86400000"/>
3     <property name="deleteInvalidSessions" value="true"/>
4     <property name="sessionValidationSchedulerEnabled" value="true"/>
5     <property name="sessionValidationScheduler" ref="sessionValidationScheduler"/>
6     <property name="sessionDAO" ref="sessionDAO"/>
7     <property name="sessionIdCookieEnabled" value="true"/>
8     <property name="sessionIdCookie" ref="sessionIdCookie"/>
9 </bean>

 

10.3 会话监听器

 

10.4 会话存储/持久化

shiro提供SessionDAO用于对话的CRUD。

 

 

我的项目中:

1     <!--会话DAO-->
2     <bean id="sessionDAO" class="org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO">
3         <property name="activeSessionsCacheName" value="shiro-activeSessionCache"/>
4         <property name="sessionIdGenerator" ref="sessionIdGenerator"/>
5     </bean>

 

shiro提供了使用ehcache进行会话存储。ehcache可以配合TerraCotta实现容器无关的分布式集群。

 1     <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
 2         <property name="authorizer" ref="aasModularRealmAuthorizer"/>
 3         <property name="realm" ref="authServiceRealm"/>
 4         <property name="cacheManager" ref="springCacheManager"/>
 5     </bean>
 6 
 7     <!-- 缓存管理器 -->
 8     <bean id="springCacheManager" class="com.baosight.aas.auth.cache.SpringCacheManagerWrapper">
 9         <property name="cacheManager" ref="cacheManager"/>
10     </bean>

 

 1     <!-- cache manager -->
 2     <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
 3         <property name="cacheManager" ref="ehcacheManager"/>
 4     </bean>
 5 
 6     <!-- 采用EhCache-->
 7     <bean id="ehcacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
 8         <property name="configLocation" value="classpath:ehcache/ehcache.xml"/>
 9         <property name="shared" value="true"/>
10     </bean>

 

posted @ 2017-02-09 16:07  七月流火嗞嗞嗞  阅读(822)  评论(0编辑  收藏  举报