zoukankan      html  css  js  c++  java
  • 集群环境下Shiro Session的管理

    问题引入

    紧接上篇连接

    在多台tomcat集群中,shiro管理的session需要放在Redis中,我们只需要增加redisSessionDAO的配置就行

        <!-- 定义会话管理器的操作  表示当前web开发中的session的处理操作都由shiro操作控制 -->
        <bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
            <!-- 定义Session可以进行序列化的工具类 -->
            <property name="sessionDAO" ref="redisSessionDAO" />  
            <property name="sessionIdUrlRewritingEnabled" value="false" />
        </bean>

    sessionDao的实现

    public class RedisSessionDAO extends EnterpriseCacheSessionDAO {
        public static final String prefix = "shrio_redis:";
        @Resource
        private RedisTemplate<String, Object> redisTempate; // 要提供有Redis处理工具类
        @Override
        protected Serializable doCreate(Session session) { // 创建Session,返回session id
            Serializable sessionId = super.doCreate(session); // 创建sessionid
            // 将当前创建好的Session的数据保存在Redis数据库里面
            this.redisTempate.opsForValue().set(prefix+sessionId.toString(), session,6000);
            return sessionId;
        }
        @Override
        protected Session doReadSession(Serializable sessionId) { // 根据session
            Session session = (Session) redisTempate.opsForValue().get(prefix+sessionId.toString());// id读取session数据
            return session;
        }
        @Override
        protected void doUpdate(Session session) { // 实现Session更新,每次操作都要更新
            super.doUpdate(session);
            if (session != null) {
                this.redisTempate.opsForValue().set(prefix+session.getId().toString(),session, 1800);
            }
        }
        @Override
        protected void doDelete(Session session) { // session的删除处理
            super.doDelete(session);
            this.redisTempate.delete(prefix+session.getId().toString());
        }
    }

    工具类redisTemplate

    上面代码中使用到了redisTemplate,但是redisTemplate默认的序列化方式有缺点,再此我们从新指定序列化方式。

       <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
            <property name="connectionFactory" ref="jedisConnectionFactory" />
            <property name="keySerializer">
                <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
            </property>
            <property name="valueSerializer">
                <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer" />
            </property> 
        </bean>
  • 相关阅读:
    最常见VC++编译错误信息集合
    网站运营最全总结
    KdPrint/DbgPrint and UNICODE_STRING/ANSI_STRING
    poj 2155 matrix
    【hdu2955】 Robberies 01背包
    【hdu4570】Multi-bit Trie 区间DP
    2014 SCAU_ACM 暑期集训
    qpython 读入数据问题: EOF error with input / raw_input
    【转】Python version 2.7 required, which was not found in the registry
    华农正方系统 登录地址
  • 原文地址:https://www.cnblogs.com/ssskkk/p/10607888.html
Copyright © 2011-2022 走看看