跨war包session同步解决方案
【功能点】
不同war包间session共享
【关键需求理解】
多系统间实现统一登陆(单点登陆),对用户屏蔽多个独立系统的存在,给用户提供一个整体统一的系统。
【实现逻辑描述】
用一个类的静态hashmap域来存放公共session信息,我们可以称之为session容器,其中key为sessionID,value为一个简单SessionUser对象。
对各个系统的访问都通过filter过滤,在filter中根据当前的sessionID判断容器是否存在该sessionID,如果不存在,则重定向到统一登陆页面,如果存在,而且当前session中不存在登陆信息,则在SessionManager中增加有效session个数,并在当前session中添加登陆信息。
当用户在一个系统中退出时,在SessionManager中删除该session信息。
当系统1超时时(通过EBossUserSessionListener监听session是否超时),在SessionManager中减少该sessionID对应的session的有效个数,当有效个数<1时,在容器中删除.
各个war的web.xml中添加如下节点:
<filter></filter>
<filter-name></filter-name>EBossUserFilter
<filter-class></filter-class>com.sitechasia.sessionResearch.ebossUser.EBossUserFilter
<filter-mapping></filter-mapping>
<filter-name></filter-name>EBossUserFilter
<url-pattern></url-pattern>/*
<listener></listener> <listener-class></listener-class> com.sitechasia.sessionResearch.ebossUser.EBossUserSessionListener
在war上级的lib中添加ssosession.jar。
【代码实现的优点】
通过一个hashMap实现session的统一管理,通过sessionUser中的有效session数来记录当前用户已经登陆的系统个数,当某个系统的session失效时,不影响整个系统的访问(只要有一个系统的session没有失效就可以访问全部系统),当所有系统的session都失效时,则不能访问任何一个系统。
通过EBossUserSessionListener实现session会话的监听。
【代码实现中的一些缺点】
此实现只能针对在同一个应用服务器下发布的各个系统,要求各个系统的域名相同,系统使用java语言。各个系统是通过页面的链接实现统一访问的。
需要基于以下条件:在一个浏览器窗口中访问相同域名内的各个系统时,生成的sessionID是相同的,在这个窗口中通过点链接打开的新窗口访问相同域名内的各个系统时,生成的sessionID也是相同的。
【如何改进】
为克服以上缺点,可以考虑通过程序控制sessionID的生成,编写一个sessionID生成算法;
将静态类容器的实现扩展为数据库方案的实现,这样可以脱离具体语言的限制,但使
用数据库方案时,因为访问任何一个页面都需要得到用户的登陆信息,势必会引发性能问题,应该针对可能引起的性能问题寻找一个适当的解决方案。
【功能点】
不同war包间session共享
【关键需求理解】
多系统间实现统一登陆(单点登陆),对用户屏蔽多个独立系统的存在,给用户提供一个整体统一的系统。
【实现逻辑描述】
用一个类的静态hashmap域来存放公共session信息,我们可以称之为session容器,其中key为sessionID,value为一个简单SessionUser对象。
对各个系统的访问都通过filter过滤,在filter中根据当前的sessionID判断容器是否存在该sessionID,如果不存在,则重定向到统一登陆页面,如果存在,而且当前session中不存在登陆信息,则在SessionManager中增加有效session个数,并在当前session中添加登陆信息。
当用户在一个系统中退出时,在SessionManager中删除该session信息。
当系统1超时时(通过EBossUserSessionListener监听session是否超时),在SessionManager中减少该sessionID对应的session的有效个数,当有效个数<1时,在容器中删除.
各个war的web.xml中添加如下节点:
<filter></filter>
<filter-name></filter-name>EBossUserFilter
<filter-class></filter-class>com.sitechasia.sessionResearch.ebossUser.EBossUserFilter
<filter-mapping></filter-mapping>
<filter-name></filter-name>EBossUserFilter
<url-pattern></url-pattern>/*
<listener></listener> <listener-class></listener-class> com.sitechasia.sessionResearch.ebossUser.EBossUserSessionListener
在war上级的lib中添加ssosession.jar。
【代码实现的优点】
通过一个hashMap实现session的统一管理,通过sessionUser中的有效session数来记录当前用户已经登陆的系统个数,当某个系统的session失效时,不影响整个系统的访问(只要有一个系统的session没有失效就可以访问全部系统),当所有系统的session都失效时,则不能访问任何一个系统。
通过EBossUserSessionListener实现session会话的监听。
【代码实现中的一些缺点】
此实现只能针对在同一个应用服务器下发布的各个系统,要求各个系统的域名相同,系统使用java语言。各个系统是通过页面的链接实现统一访问的。
需要基于以下条件:在一个浏览器窗口中访问相同域名内的各个系统时,生成的sessionID是相同的,在这个窗口中通过点链接打开的新窗口访问相同域名内的各个系统时,生成的sessionID也是相同的。
【如何改进】
为克服以上缺点,可以考虑通过程序控制sessionID的生成,编写一个sessionID生成算法;
将静态类容器的实现扩展为数据库方案的实现,这样可以脱离具体语言的限制,但使
用数据库方案时,因为访问任何一个页面都需要得到用户的登陆信息,势必会引发性能问题,应该针对可能引起的性能问题寻找一个适当的解决方案。
发表评论
-
菜鸟 Spring 源码解读 推荐流程
2012-01-11 09:18 5128Spring源代码解析(一):IOC容器:http://www ... -
深入剖析Classloader(一)--类的主动使用与被动使用
2011-12-27 22:13 1094我们知道java运行的是这样的,首先java编译器将我们的源代 ... -
Java中连接字符串时是使用+号还是使用StringBuilder?
2011-12-26 14:04 922字符串是Java程序中最常用的一种数据结构之一。在Java中的 ... -
转一篇有关Java的内存泄露的文章(受益哦)
2011-07-20 09:28 7741 引言 Java的一个 ... -
Tomcat内存溢出的原因
2011-07-19 09:41 729Tomcat内存溢出的原因 在生产环境中tomcat内 ... -
深入研究java.lang.ThreadLocal类
2011-07-13 09:39 685一、概述 ThreadLocal是什么呢?其实Thread ... -
开源框架spring详解-----AOP的深刻理解
2011-05-26 22:13 1250开源框架spring详解-----AOP的深刻理解 AOP的 ... -
struts2核心工作流程与工作原理
2011-05-26 15:35 12891. Struts2架构图 这是S truts2官方站点提供的 ... -
Spring注入方式及用到的注解 -----@Component,@Service,@Controller,@Repository
2011-05-26 15:04 1226注入方式: 把DAO实现 ... -
Java中的native关键字浅析(Java Native Interface)
2011-05-21 23:13 740JNI是Java Native Interface的 ... -
Volatile 变量
2011-04-26 17:01 654Java 语言中的 volatile 变量可以被看作是一种 “ ... -
Java对象的强、软、弱和虚引用
2011-04-26 16:04 6271.Java对象的强、软、 ... -
Web 应用程序常见漏洞 CSRF 的入侵检测与防范
2011-04-23 15:00 1120简介: 互联网的安全问题一直存在,并且在可预见的未来中没有消弭 ... -
详解XSS跨站脚本攻击
2011-04-23 13:46 1142一、什么是XSS攻击 XSS ... -
CSRF攻击原理解析
2011-04-22 10:29 12820×00. 前言 在Web程序中 ... -
selenium 初步体检之富文本框操作
2011-04-20 20:10 1542public class LoginTest extends ... -
webx
2011-03-05 17:54 1017webx 学习笔记。 -
Java读带有BOM的UTF-8文件乱码解决方法
2011-03-02 11:12 2463Java default io reader does not ... -
java sftp tools
2011-02-24 13:30 1517import java.io.File; import jav ... -
HtmlUnit
2010-10-18 22:27 1658IntroductionThe dependencies pa ...
相关推荐
- **跨环境调用EJB**:包括如何在独立的Tomcat或Java SE环境中调用EJB,以及如何从Web应用中调用EJB。 - **获取最新版本**:定期检查并获取最新版本的JBoss,以利用最新的特性和修复。 #### 三、基础知识学习 - **...
在JBOSS 4.2.2中,我们可以使用JGroups来实现节点间的通信和状态同步,JGroups是一个开源的集群通信库,提供了一套完整的集群解决方案,包括组成员发现、消息传递和故障检测等功能。 配置EJB群集时,你需要修改...
- 在JBoss中部署Web应用,并调用同一服务器上的EJB。 5. **获取最新JBOSS版本** - 关注官方渠道,如GitHub仓库,以获得最新版本的JBOSS AS。 #### 三、基础知识学习 1. **熟悉JBoss目录结构** - 了解`bin`, `lib...
在JBoss中,部署EJB通常涉及创建EJB类,定义接口,编写部署描述符(ejb-jar.xml),并将所有这些打包到一个ejb-jar文件中,然后将其与应用服务器的其他配置一起放入war或ear文件进行部署。 客户端与EJB的交互可以...
- **跨环境调用EJB**:包括在独立的Tomcat中调用EJB,以及在部署于JBoss的Web应用中调用EJB。 - **获取内嵌EJB 3的JBoss版本**:介绍如何获取最新版本的包含EJB 3支持的JBoss。 #### 三、基础知识学习 - **熟悉...
JBoss提供了方便的部署机制,可以将Web应用和EJB应用分开部署,或者打包在一个单一的WAR或EAR文件中。了解如何在JBOSS中独立部署这两种应用对于理解EJB3.0的工作原理至关重要。 ### 第三章 基础知识学习 3.1 在...
- **部署方式**:EJB 可以部署在 JBoss 中,也可以在独立的 Tomcat 或 Java SE 环境中调用。 #### 三、基础知识学习 - **打包方式**: - **EJB 打包**:通常使用 `.jar` 文件形式,可以包含 Remote 和 Local 接口...
- 在部署于JBoss AS的Web应用中调用EJB组件。 **5. 获取最新版本的JBoss** - 访问JBoss官方网站或社区论坛获取最新的包含EJB3支持的JBoss版本。 #### 三、基础知识学习 **1. JBoss 目录结构** - 了解JBoss AS的...
- 在 JBoss AS 中部署 Web 应用程序,通过 JNDI 查找 EJB 的远程接口进行调用。 **2.5 如何获取最新的内嵌 EJB3 的 JBOSS 版本**: - 访问 JBoss 官方网站或 GitHub 仓库,查看最新的发行版信息。 #### 三、基础...
- **部署与配置**:理解EAR/WAR/WAR-INF目录结构,学会编写部署描述符(如web.xml,ejb-jar.xml)。 - **服务支持**:应用服务器提供JMS(Java Message Service)、JTA(Java Transaction API)、JPA(Java ...