`

【原创】CAS总结之集群环境篇

阅读更多

 

      CAS的集群环境,包括CAS的客户应用是集群环境,以及CAS服务本身是集群环境这两种情况。在集群环境下使用CAS,要解决两个问题,一是单点退出时,CAS如何将退出请求正确转发到用户session所在的具体客户应用服务器,而不是转发到其他集群服务器上,二是解决CAS服务端集群环境下各种Ticket信息的共享。下面依次讨论在这两种集群环境下,CAS的使用情况。


一 客户应用是集群环境

 

集群配置:几台Apache服务器+几台Resin服务器

我们分三种场景依次来讨论一下。

 

1:正常登录

 

登录流程

 

      正常登录过程,如上图所示。CAS客户应用和CAS服务之间是redirect,CAS将请求redirect回客户应用时,浏览器会把客户应用的sessionid(以cookie的形式)顺便带给客户应用,客户应用的集群环境,会根据sessionid,将用户请求始终转发到某一台具体的服务器上。正常登录过程是没有问题的。

 

2:用户正在访问的客户应用服务器宕掉

     当用户正在访问的客户应用服务器宕掉时,集群环境会把用户的下次请求转发到另一台服务器上。如果各服务器之间实现了session共享,那部署在客户应用的CAS Filter是不会再redirect 到CAS去登录的,如果各服务器没有实现session共享,session信息丢失了,那CAS Filter会redirect 到CAS去登录,然后把用户信息加载到本机器的session里。在这种场景下,也是没问题的。

 

3:单点退出

      在退出的时候,客户应用负责redirect到CAS的logout接口,logout接口首先将服务端的TGT对象失效掉,然后遍历TGT对象的services属性(HashMap<String,Service>类型),对于每个Service对象,调用其logOutOfService方法,在此方法中,通过HttpURLConnection访问Service的originUrl属性标识的URL,客户应用端的SingleSignOutFilter截获此请求,将本地的session失效掉,从而达到单点登录的效果。


      这里就有个问题了,Service的originUrl属性的值是CAS客户应用第一次redirect 到CAS时,传来的service参数的值,如http://cms.company.com。CAS通过HttpURLConnection访问http://cms.company.com时,客户应用的集群环境如何知道该把请求转发到哪台服务器上?如果我们什么都不做,那转发到哪台服务器上是随机的,这样的话,客户应用的session就不可能销毁。


      对于这个问题,我的解决办法是对CAS做了一定的修改。在客户应用第一次redirect到CAS时,我在service参数里加上了客户应用的sessionid值,如:https://cas.company.com?service=http://cms.company.com;jsessionid=.......。这样,CAS服务端生成的Service对象的originUrl属性的值就等于http://cms.company.com;jsessionid=....... 。单点退出时,CAS通过HttpURLConnection访问客户应用时,首先从originUrl中解析出jsessionid的值,然后将其放入HttpURLConnection对象的requestProperty中去,代码如下:

String jsessionid = "jsessionid="+WebUtils.extranctJsessionIdFromUrl(url);
connection.setRequestProperty("Cookie",jsessionid);

 

      这样,客户应用接收到此请求时,会得到sessionid值,然后根据sessionid值,将请求转发到正确的服务器上。这样,就解决了集群问题。

 

二 CAS服务本身是集群环境


      CAS服务是集群环境时,如果我们什么都不做,客户应用第一次redirect到CAS,生成TGT对象的服务器,和后来客户应用为了验证Ticket,而访问的CAS服务器,有可能不是一台,这样的话,肯定会失败。如果我们使用memcached这样的集群缓存插件,将TGT、ST对象统一存储,那这个问题就迎刃而解了。

 

 

  • 大小: 16.1 KB
分享到:
评论
10 楼 renlei413326889 2014-11-19  
服务正确的退出系统了-->无法正确的退出了 通过map获取不了session了
9 楼 renlei413326889 2014-11-19  
客户应用接收到此请求时,会得到sessionid值,然后根据sessionid值,将请求转发到正确的服务器上。这样,就解决了集群问题。

请教一下 你说的客户应用接收到此请求,应该是说nginx或者其他反向代理服务器根据sessionid转发到正确的集群中的那台服务器吧?

还有我看客户端源码的时候,session和st是通过map绑定关系的,cas发送退出请求的时候是附加发送了xml文本包含st,然后客户端通过st找到session;这里有个问题,如果集群中正确的这台服务器重启了,session和st绑定关系的map是在内存的,这时候相关的绑定关系也没有了,服务正确的退出系统了
8 楼 howesen 2011-11-01  
我们在WAS 6.1集群下是正常的
7 楼 koubi1986 2011-10-12  
你好,我现在cas集群的时候也遇到问题。
我是用LVS+memcache+Tomcat来做的。
LVS做负载均衡,Tomcat我也做了session的复制功能
但是cas里面Ticket数据始终没有共享。
6 楼 轻草飞翔 2010-10-19  
请问在cas_server的集群这块,你做了吗?
5 楼 zhenkm0507 2010-01-26  
kscn_com 写道
通过配置jboss也能实现,不需要更改源代码。

能否提供一下配置说明,让我也学习学习,谢谢啊。
4 楼 kscn_com 2010-01-24  
通过配置jboss也能实现,不需要更改源代码。
3 楼 kscn_com 2010-01-19  
我也是在client是集群环境下时,单点退出不起作用的情况,能不能将这块的修改详细说明一下,我的邮箱是zhenyu82.he@gmail.com
2 楼 zhenkm0507 2010-01-18  
我用的是3.3版本
1 楼 kscn_com 2010-01-17  
你用的cas是什么版本啊

相关推荐

    CASClient集群环境的Session问题及解决方案.docx

    CASClient 集群环境的 Session 问题及解决方案 本文将详细介绍 CASClient 集群环境中的 Session 问题及解决方案。CASClient 是一种开源的单点登录系统,能够提供统一的登录和注销机制。但是在集群环境中应用 CAS...

    用JBOSS CACHE 做CAS集群在weblogic上部署的问题

    标题中的“用JBOSS CACHE做CAS集群在weblogic上部署的问题”涉及到的是一个特定的分布式缓存解决方案在不同应用服务器环境下的集成问题。CAS(Central Authentication Service)是一种开源的身份验证服务,它允许...

    cas集群架构程序 包括服务器程序和客户端

    cas多服务器集群及客户端程序 服务器运行run.bat即启动 客户端通过 Client.login() Client.logout() Client.touch() Client.changePassword() 调用 通过telnet可以控制服务器重启(输入R)和停止(输入S)

    H3C CAS集群管理技术白皮书.docx

    * 组网拓扑:H3C CAS云计算管理平台可以自动化配置和管理服务器、存储、网络等资源,形成高效的集群环境。 * 注意事项:在部署H3C CAS云计算管理平台时,需要注意服务器硬件的要求、整合比(单台服务器上虚拟机数量...

    nginx集成cas登录

    目前此脚本的技术架构为nginx+lua,实现的是casclient方式,其中功能包括sso登录拦截,查询用户信息以及用户登出功能。 文章也帮助简单普及了一下cas的多种登录方式以及部分画图说明。 在使用此脚本之前,需要了解的...

    H3C 云计算CAS产品典型配置案例汇总集.rar

    H3C_CAS虚拟机搭建双机热备环境方案及报告 ) H3C_CAS_3.0虚拟机防病毒操作指导书 H3C_CAS端口镜像特性操作指导书 H3C_CAS主机时间同步操作指导书 H3C_CAS资源模糊搜索特性说明书 H3C_CAS云彩虹2.0操作指导书 H3...

    H3C CAS总结.zip

    这个压缩包“H3C CAS总结.zip”包含了丰富的资料,包括经验文件夹、配置案例、开局手册等,这些都是理解和掌握H3C CAS的重要资源。 首先,我们来看“CAS维护实验”。这个文件夹可能包含了一系列的实践操作教程,...

    cas spnego认证方式(即加ad域的windows主机应用免登录)高可用集群方案(目前来看国内第一份资料,本人探索出来的)

    然而,在加入AD域的Windows主机环境下实现CAS的SPNEGO认证模式,并构建高可用集群方案,国内鲜有现成资料和技术指导。本文档旨在分享通过作者亲身经历及不懈努力探索出的一套完整解决方案。 #### 二、关键技术点...

    基于CAS集群的单点失效问题解决方案

    ### 基于CAS集群的单点失效问题解决方案 #### 概述 随着信息技术的不断发展,企业或组织内部通常会部署多个应用系统来满足不同业务需求。为了提高用户体验并简化登录流程,单点登录(Single Sign-On, SSO)成为了...

    cas server 4.2.7 环境搭建maven

    在本场景中,我们将讨论如何使用Maven构建工具搭建CAS Server 4.2.7的环境,并集成Spring Security进行更高级的安全管理。 首先,`cas-server-4.2.7`版本是一个稳定且广泛使用的版本,提供了丰富的功能和安全特性。...

    django+cas环境部署

    ### django+cas环境部署知识点详解 #### 一、系统架构概述 本系统采用了Django作为主要的应用框架,并结合了Nginx、Elasticsearch、CAS(Central Authentication Service)及MySQL等多个组件来构建一个完整的分布式...

    SSO CAS Server 二次开发说明文档

    5. **修改`web.xml`**:可能需要进一步配置Web容器,以支持集群环境下的Ticket同步机制。 #### CASServer登录页定制 可以根据实际需求对CAS Server的登录页面进行定制,以符合品牌标识或提高用户体验。 1. **拷贝...

    CAS 协议 票据、url介绍,包括cas1.0和cas2.0

    CAS 协议 票据、url 介绍,包括 cas1.0 和 cas2.0 CAS 协议是一个基于 HTTP 的协议,分为两部分:票据(Ticket)和 URL。CAS 协议的主要目的是提供单点登录(SSO)功能,实现用户的身份验证和授权。 票据(Ticket...

    cas4.2.7服务端+cas客户端+示例程序+环境搭建之客户端war包

    cas4.2.7服务端+cas客户端+示例程序+环境搭建之客户端war包 一切跑不起来的程序和走不通的教程都是耍流氓,二话不说,先按照我的步骤把程序跑起来在说吧。 请看博客...

    cas-overlay-template-6.4 服务端代码

    10.CAS-redisCluster集群存储ticket(相应redis必须配置成cluster集群) 11.CAS-加密存储ticket 12.CAS-实习动态验证码 13.CAS-实习自定义登录 14.CAS-实现自定义返回用户登录信息 15.CAS-页面缓存记住我 ----------...

    cas4.2.7服务端+cas客户端+示例程序+环境搭建之服务端war包

    cas4.2.7服务端+cas客户端+示例程序+环境搭建之服务端war包 请看博客:http://blog.csdn.net/pucao_cug/article/details/70182968 该war文件是cas4.2.7的服务端的war包。服务端 的war内我已经对WEB-INF文件夹中的web...

Global site tag (gtag.js) - Google Analytics