• 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>
  • 相关阅读:
    Leetcode 1711. 大餐计数(桶)
    macOS下安装powerline-status失败(报错Could not install packages due to an EnvironmentError)
    macOS下安装oh my zsh失败(报错Connection refused)
    Chapter 10 Operator Overloading
    牛客IOI周赛26-普及组 B. 子序列(int128)
    关于状压DP中子集状态的枚举
    2021蓝桥杯省赛第一场C/C++A组 试题E:回路计数(状压DP)
    AcWing 2879. 画中漂流(简单DP)
    Leetcode 525. 连续数组(前缀和性质/map)
    牛客小白月赛34 B. dd爱探险(状压DP)
  • 原文地址:https://www.cnblogs.com/lyh421/p/6382584.html
Copyright © 2020-2023  润新知