集群环境下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>
集群环境下Shiro Session的管理的更多相关文章
- 集群环境下,Session管理的几种手段
集群环境下,Session管理的几种手段 1.Session复制 缺点:集群服务器间需要大量的通信进行Session复制,占用服务器和网络的大量资源. 由于所有用户的Session信息在每台服务器上都 ...
- 集群环境下的Session管理
1. 集群环境下的管理HTTPSSession所遇到的问题 一台服务器对应这个一个session对象,无法在另外一个服务器互通 解决方法: 1. Session 的 Replication(复制)将当 ...
- weblogic 12C集群环境下的session复制
做过weblogic集群环境的人应该都清楚,要想实现session同步,必须满足两个条件:第一,在weblogic.xml里面增加session同步相关的代码:第二,所有放入session的类都要序列 ...
- 【原创】Tomcat集群环境下对session进行外部缓存的方法(2)
Session对象的持久化比较麻烦,虽然有序列化,但是并不确定Session对象中保存的其他信息是否可以序列化,这可能是网上很多解决方案摒弃此种做法的原因,网上的很多做法都是将Session中的att ...
- 【原创】Tomcat集群环境下对session进行外部缓存的方法(1)
BJJC网改版, 计划将应用部署在tomcat集群上,集群的部署方案为Apache+Tomcat6,连接件为mod_jk,其中开启了session复制和粘性session.计划节点数为3个. 到这,或 ...
- 集群环境下的Session共享
一.Cookie机制和Session机制回顾 1)定义:Session成为“会话”,具体是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间.Session ...
- redis内存分配管理与集群环境下Session管理
##################内存管理############### 1.Redis的内存管理 .与memcache不同,没有实现自己的内存池 .在2..4以前,默认使用标准的内存分配函数(li ...
- redis 与java的连接 和集群环境下Session管理
redis 的安装与设置开机自启(https://www.cnblogs.com/zhulina-917/p/11746993.html) 第一步: a) 搭建环境 引入 jedis jar包 co ...
- 分布式集群环境下,如何实现session共享一(应用场景)
在web应用中,由于http的请求响应式,无状态.要记录用户相关的状态信息,比如电商网站的购物车,比如用户是否登录等,都需要使用session.我们知道session是由servlet容器创建和管理, ...
随机推荐
- c# xml操作(一)
c# xml操作(一) 此博文包含图片 (-- ::)转载▼ 标签: 杂谈 分类: c# 同样是增,删,改,查四种操作.现在我们就详细介绍一下增和删两种操作.看下面的一个xml示例: <?xml ...
- setInterval setTimeout 详解
JavaScript的setTimeout与setInterval是两个很容易欺骗别人感情的方法,因为我们开始常常以为调用了就会按既定的方式执行, 我想不少人都深有同感, 例如 setTimeout( ...
- Javascript中没有块级作用域(模仿)
在C/C++中,由花括号封闭的代码块都有自己的作用域,也就是块级作用域(私有作用域).而在javascript中则没有块级作用域,首先来看一段代码: function test(){ for(var ...
- 通过MSSQL分析器跟踪研究EM内部行为并解决identify列问题
今天有人问到MSSQL表里的IDENTITY字段,如何让它在复制原来数据到该表时,原来数据的IDENTITY字段不变,而新插入数据时,新插入的数据的IDENTITY依然增长,查了些资料,做了个实验,最 ...
- UnicodeEncodeError: 'ascii' codec can't encode character...的解决方法
在python2.7下,因为想从数据库中读出来分类名进行写入到文件,提示 Traceback (most recent call last): File "test.py", li ...
- pyc
当运行一个高级程序的时候,需要一个翻译机把高级语言变成计算机能读懂的机器语言的过程.这个过程分为两类: 编译 在程序执行之前,先通过编译器对程序执行一个编译的过程,把程序变成机器语言,运行时就不需要翻 ...
- 【k短路&A*算法】BZOJ1975: [Sdoi2010]魔法猪学院
Description 找出1~k短路的长度. Solution k短路的求解要用到A*算法 A*算法的启发式函数f(n)=g(n)+h(n) g(n)是状态空间中搜索到n所花的实际代价 h(n) ...
- C++的代理类
怎样在一个容器中包含类型不同,但是彼此有关系的对象?众所周知,C++的容器只能存放类型相同的元素,所以直接在一个容器中存储不同类型的对象本身是不可能的,只能通过以下两种方案实现: 1. 提供一个间接层 ...
- hystrix 结果缓存机制(5)
hystrix支持将一个请求结果缓存起来,下一个具有相同key的请求将直接从缓存中取出结果,减少请求开销.要使用hystrix cache功能 第一个要求是重写getCacheKey(),用来构造ca ...
- Scala 开发遇到的坑
1. x.purchaseIntax.getOrElse(BigDecimal(0.00)) 可以直接写成 x.purchaseIntax.getOrElse(0)自动转换的 2. srcDataL ...