在ofbiz集群中使用redis共享session
来源:互联网 发布:网络机房综合布线系统 编辑:程序博客网 时间:2024/04/29 00:50
最开始的想法是使用session监听器,在session创建时,根据sessionid为键,map为值,加入redis中.,在session销毁时删除此sessionid.
包装session,重写session中的方法来设置值和取得值.
包装request,将包装的session作为包装request的session.
结果在实现时,发现每次创建session时id都不同而且控制不了,这样的话一台服务器死掉,切换到另一台服务器的时候
原来存在redis中的数据得不到.
后面又想覆盖掉jsessionid,没成功.只能创建了一个rsessionid来做,在过滤器中根据此键来存入redis,
由于关闭ofbiz时,session销毁没有执行,只能设置存活时间.
由于有多个组件要使用此功能那么在初始化连接时初始一次就行了.
不过目前为止还没有上线,不知道这样有没有问题.
主要代码:
public void init(FilterConfig arg0) throws ServletException {if (redisClient == null) {synchronized (RedisFilter.class) {if (redisClient == null) {redisClient = RedisClient.getRedisClient();}}}}//当关闭服务器时session销毁没有触发session监听器private void setRedisAttribute(String id) {Jedis redis = null;try {redis = redisClient.getJedis();Object redisValue = redis.get(UtilObject.getBytes(id));if (redisValue == null) {synchronized (RedisFilter.class) {if (redisValue == null) {redis.set(UtilObject.getBytes(id), UtilObject.getBytes(new HashMap<String, Object>()));redis.expire(UtilObject.getBytes(id), 86400);}}}} catch (Exception e) {e.printStackTrace();} finally {redisClient.returnJedis(redis);}}
HttpServletRequest request = (HttpServletRequest) arg0;HttpServletResponse response = (HttpServletResponse) arg1;Cookie[] cookies = request.getCookies();String sessionId = "", cookiePath = "";int maxAge = -1;if (cookies != null) {for (Cookie c : cookies) {if (c.getName().equals("RSESSIONID")) {sessionId = c.getValue();cookiePath = c.getPath();maxAge = c.getMaxAge();}}}HttpSession session = request.getSession();sessionId = UtilValidate.isEmpty(sessionId) ? session.getId() : sessionId;cookiePath = "/";session.setAttribute("redisSessionId", sessionId);Cookie c1 = new Cookie("RSESSIONID", sessionId);c1.setPath(cookiePath);response.addCookie(c1); arg2.doFilter(request, response);
0 0
- 在ofbiz集群中使用redis共享session
- redis集群实现session共享
- redis集群共享session配置
- PHP集群中SESSION共享方案之Redis
- PHP集群中SESSION共享方案之Redis
- 分布式中使用Redis实现Session共享
- 分布式中使用Redis实现Session共享
- 使用redis进行基于shiro的session集群共享
- 使用redis进行基于shiro的session集群共享
- 使用redis进行基于shiro的session集群共享
- spring-session+redis集群实现Session共享
- shiro 在集群环境下用redis(集群版)做session共享
- apache+tomcat集群session共享-redis服务器
- tomcat集群基于redis共享session解决方案
- linux-tomcat-session共享-redis集群
- nginx+tomcat+redis的集群+session共享
- 基于Redis的Tomcat集群Session共享
- tomcat集群-基于redis的session共享
- 0001-人生就是一场从起点到终点的历程
- 第二章 计算机的发展及应用
- 区别getFragmentManager、getSupportFragmentManager和getChildFragmentManager
- jquery获取当前点击的div的内容
- 直接插入排序
- 在ofbiz集群中使用redis共享session
- 4 描述性统计量和统计图
- QT相同控件相似功能
- jq 改变其他兄弟元素的样式
- 蓝桥杯 算法训练 Anagrams问题
- tomcat学习笔记
- !算 24 (dfs)
- 安卓五大进程特点及srvice的基本概念
- 阿里云平台生产环境使用经验分享