`
xly_971223
  • 浏览: 1275979 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Jboss3.2.3实现的SSO原理

阅读更多

Jboss3.2.3实现的SSO是基于客户端cookie和服务器端session的工作的。 基本工作流程是: 在${JBOSS_HOME}/server/default/deploy/jbossweb-tomcat41.sar/META-INF/jboss-service.xml中配置一个SSO的Valve,在待使用SSO的虚拟主机下加入如下代码: 启动Jboss时,Jboss会加载该Valve,创建一个org.jboss.web.tomcat.tc4.authenticator.SingleSignOn的实例(以下简称该实例为ourSSO)。 ourSSO实例会维护两个HashMap,分别为session与ssoId,ssoId与SingleSignOnEntry的映射集合。注:SingleSignOnEntry存放用户登录信息。 SSO处理单元:当访问被保护资源的请求从客户端传来时,ourSSO会首先对它进行处理,如果该用户已通过本应用验证,则直接将请求传入下一处理单元(安全验证);如果用户未通过本应用验证,则读取请求对象中的cookie,查找是否存在Jboss的SSO标志cookie,如果有,读出cookie中的ssoId(SingleSignOnEntry的标志Id),根据ssoId在存放SingleSignOnEntry的HashMap中查找对应的用户信息,如果找不到对应的SingleSignOnEntry,通过HttpServletResponse清除客户端对应cookie,如果可以找到,将ssoId放入一个全局的标志变量中,并将请求传入下一处理单元,如果在请求对象中的cookie中查找不到JBoss的SSO标志cookie,则直接将请求传入下一处理单元。 安全验证单元:判断是否存在ourSSO实例,如果不存在ourSSO实例,则按照正常流程检查请求是否包含正确并拥有足够权限的用户信息;如果存在ourSSO实例,在验证完成后,检查ssoId是否存在并有效,如果ssoId存在并有效,调用SingleSignOn的方法更新ourSSO维护的两个HashMap表,如果ssoId不存在或无效,随机生成一个ssoId,并通过HttpServletResponse将此ssoId写入客户端cookie,同时向ourSSO维护的两个HashMap实例中分别加入新的映射。
ourSSO会一直监听session事件,如果某个session失效,ourSSO维护的两个HaspMap中的相关的映射会被删除掉。

可以看到,Jboss3.2.3实现的SSO是依赖于cookie的,如果客户端浏览器禁止cookie或不支持cookie,SSO将不能正常工作。


4. 基于URL重写实现的SSO

分析Jboss3.2.3实现的SSO原理,不难发现,SSO之所于依赖于cookie的关键在于,在服务器与客户端的交互过程中,将一个ssoId存放在了cookie中,所以只要能将ssoId通过另外的方式存放并传递,就可以实现不依赖与cookie的SSO,而URL重写就提供了这种方式。 URL重写是指把一个唯一的ID(由服务器生成)嵌入到所有的URL中,当客户点击这些重写后的URL发送请求至服务器时,服务器就可以读取这个ID,在服务器端查找到对应的session或其他一些客户信息。基于URL重写实现SSO,就是把一个唯一的ssoId嵌入到所有的URL中,而服务器端接受到包含ssoId的请求时,ourSSO就可以读取这个ssoId,查找对应的SingleSignOnEntry,然后进行验证等上述处理流程。

具体设计为: 写一个新类继承org.jboss.web.tomcat.tc4.authenticator.SingleSignOn,修改获取ssoId及清除ssoId的操作实现,由读取cookie和清除cookie,改为读取请求对象的一个标志Parameter和清除请求对象的一个标志Attribute,该标志Parameter用来从客户端传递ssoId到服务器端,而标志Attribute用来从SSO单元传递ssoId到服务器(因为Parameter无法清楚,而Attribute可以清除)。而安全处理单元中的写入cookie的操作,也对应的修改为添加标志Attribute到request中,然后在jsp或sevlet中将ssoId嵌入到URL中。 改变后的工作流程如下:SSO处理单元:当访问被保护资源的请求从客户端传来时,ourSSO会首先对它进行处理,如果该用户已通过本应用验证,则直接将请求传入下一处理单元(安全验证);如果用户未通过本应用验证,则查找请求中是否存在JBoss的SSO标志Paramter,如果有,读取ssoId(SingleSignOnEntry的标志Id),根据ssoId在存放SingleSignOnEntry的HashMap中查找对应的用户信息,如果找不到对应的SingleSignOnEntry,清除请求对象的标志Attribute,如果可以找到,将ssoId作为标志Attribute写入请求对象,同时将ssoId放入一个全局的标志变量中,并将请求传入下一处理单元,如果在请求对象中查找不到JBoss的SSO标志Paramter,则直接将请求传入下一处理单元。 安全验证单元:判断是否存在ourSSO实例,如果不存在ourSSO实例,则按照正常流程检查请求是否包含正确并拥有足够权限的用户信息;如果存在ourSSO实例,检查该实例是否是上面新写的SingleSignOn子类的实例,如果不是,则按照原流程进行处理,如果是,则按照如下流程进行处理:在验证完成后,检查ssoId是否存在并有效,如果ssoId存在并有效,调用SingleSignOn的方法更新ourSSO维护的两个HashMap表,如果ssoId不存在或无效,随机生成一个ssoId,作为标志Attribute写入请求对象,同时向ourSSO维护的两个HashMap实例中分别加入新的映射。 页面处理:通过读取请求对象的标志Attribute,获得ssoId,将其嵌入到URL中。其中需要注意下面两点:

(1) 对于form表单,如果以get方式提交,应将ssoId作为表单的一个input域方式嵌入;如果以post方式提交,可以将ssoId作为表单的一个input域方式嵌入,也可以在重写action的值,将ssoId嵌入进去。

(2) 重写URL或action值时,应注意当URL或action无参数,则附加的字符串应该以"?"开始,如已有参数,则应以"&"开始。 另外,对于服务器内部转发的请求,无法对这样的请求对象附加Parameter,所以对转发的请求应特殊处理。根据Sevlet2.3规范,转发的请求应在同一应用内,故在SSO处理单元,应在查找请求中是否存在JBoss的SSO标志Paramter不得之后,检查一下该请求的session是否在ourSSO维护的存放session-ssoId的HashMap中存在,如果存在,则将其对应ssoId值作为该请求的ssoId进行处理。 如上实现后,在${JBOSS_HOME}/server/default/deploy/jbossweb-tomcat41.sar/META-INF/jboss-service.xml中加入新写的SingleSignOn子类作为待实现SSO的虚拟主机的一个Valve,在浏览器关闭cookie的情况下,基于BASIC验证方式的应用间可以实现SSO的效果。因为JBoss3.2.3基于FORM安全域验证本身就对cookie存在依赖,所以无法验证上述实现后基于FORM的安全验证是否可以实现SSO的效果。

分享到:
评论

相关推荐

    jboss-3.2.3.zip

    是一个基于J2EE的开放源代码的应用服务器。jboss-3.2.3.zip

    CAS实现sso单点登录原理

    "CAS实现sso单点登录原理" CAS(Central Authentication Service)是Yale大学发起的一个企业级的、开源的项目,旨在为Web应用系统提供一种可靠的单点登录解决方法(属于Web SSO)。CAS开始于2001年,并在2004年12月...

    jbossportal-sso-header:在 JBoss EAP 上读取 JBoss Portal 6.3 用户名的标题

    使用“$ mvn package”构建创建一个名为 com/tremolosecurity/sso/jpp/header/main 的目录将 target/jbossportal-sso-trustheader-0.0.1-SNAPSHOT.jar 复制到 com/tremolosecurity/sso/jpp/header/main 将 src/main...

    JBoss5部署原理

    ### JBoss5部署原理详解 #### 一、JBoss5微容器架构与启动流程 JBoss5采用了全新的微容器架构,这种设计使得整个系统更为灵活且易于扩展。启动时,JBoss5首先会加载一个名为`ProfileServiceBootstrap`的类,该类...

    JBoss JMX实现架构

    【JBoss JMX实现架构】深入解析 JBoss JMX(Java Management Extensions)实现架构是JBoss应用服务器中用于管理和服务的核心...理解类加载器的工作原理和Java的类型系统对于开发和维护高效、可靠的JBoss应用至关重要。

    Apache安装及JBOSS部署说明文档.rar

    描述了部署jboss3.2.3/3.2.6时一些心得、常用配置项。 目 录 1 .Apache2.0及连接器jk1.2的编译部署 4 1.1下载相关软件包 4 1.2 apache2.0的编译安装 4 1.3 jk1.2.14的编译安装 6 1.4 apache及jk1.2的参数...

    jboss配置入门,jboss的初级配置

    例如,在jboss3.2.3中,我们可以修改%JBOSS_HOME%/server/default/deploy/jbossweb-tomcat41.sar/META-INF/jboss-service.xml文件,以实现session sticky配置。 jboss的应用程序下载和安装 jboss的应用程序可以从...

    JBoss+jBPM+jPDL用户开发手册_3.2.3

    《JBoss+jBPM+jPDL用户...通过阅读《JBoss+jBPM+jPDL用户开发手册_3.2.3》,开发者能够熟练掌握在JBoss平台上利用jBPM和jPDL进行业务流程自动化的方法,从而提升企业的流程管理效率,实现更高效、更灵活的业务运营。

    jboss入门

    ### jBoss入门详解 ...以JBOSS3.2.3为例,需要修改`%JBOSS_HOME%/server/default/deploy/jbossweb-tomcat41.sar/META-INF/jboss-service.xml`中的`<Engine name="MainEngine" defaultHost="localhost">`为`...

    jboss原理-4(injection and ioc).docx

    在本文中,我们将探讨如何利用JBoss Microcontainer实现高级的DI和IoC,并通过XML配置文件(-beans.xml)和注解来应用这些特性。 首先,理解DI和IoC的基本理念是至关重要的。DI是一种设计原则,它允许外部代码控制...

    jboss 5 原理 2 classloader

    JBoss 5是一款知名的Java应用服务器,其在类加载(Class Loading)方面有着独特的处理方式...通过理解和掌握JBoss 5的类加载原理,开发者可以更有效地管理和优化应用程序的运行时环境,提高软件的可扩展性和可维护性。

    jboss portlet实现文件上传小项目

    【JBoss Portlet实现文件上传小项目】 在Java企业级应用开发中,JBoss Portal是一个常用的portlet容器,它提供了一个可扩展的平台来构建、部署和管理web应用程序,特别是portlet应用。Portlets是portlet容器中的...

    jboss jms参考资料包

    本文档描述了apache web服务器安装以及常用的编译模式;描述了apache+jboss3.2.6做负载均衡(load balance)的部署细节以及一些常见错误说明;描述了部署jboss3.2.3/3.2.6时一些心得、常用配置项

    Apache安装及jboss部署说明文档

    本文档描述了apache web服务器安装以及常用的编译模式;描述了apache+jboss3.2.6做负载均衡(load balance)的部署细节以及一些常见错误说明;描述了部署jboss3.2.3/3.2.6时一些心得、常用配置项。

    使用JBoss jBPM实现流程访问和执行的授权

    使用JBoss jBPM实现流程访问和执行的授权

    JBoss架构分析以及构架原理

    ### JBoss架构分析及构架原理 #### 1. 引言 ##### 1.1 JBoss简介 JBoss是一款免费且开源的Java 2 Platform, Enterprise Edition (J2EE) 实现,由JBoss集团开发并通过GNU Lesser General Public License (LGPL) ...

    jboss集群完整介绍

    #### 六、Jboss集群的实现原理 在基于请求的负载均衡模式下,Jboss利用拦截器机制,在接收到用户请求时进行预处理,根据会话复制策略决定数据如何在集群内传播。这种方式虽能确保即使在部分节点故障时服务不中断,...

    JBoss_jBPM_jPDL用户开发手册_3.2.3.pdf 中文-(转)zhangym

    《JBoss_jBPM_jPDL用户开发手册_3.2.3.pdf》作为开发者的重要参考资料,详细介绍了如何使用jBPM和jPDL进行流程开发。手册内容可能涵盖: - **安装与配置**:指导读者设置开发环境,包括JBoss服务器的部署和jBPM的...

Global site tag (gtag.js) - Google Analytics