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
分享到:
相关推荐
CASClient集群环境的Session问题及解决方案.docx
cas多服务器集群及客户端程序 服务器运行run.bat即启动 客户端通过 Client.login() Client.logout() Client.touch() Client.changePassword() 调用 通过telnet可以控制服务器重启(输入R)和停止(输入S)
cas4.2.7服务端+cas客户端+示例程序+环境搭建之客户端war包 一切跑不起来的程序和走不通的教程都是耍流氓,二话不说,先按照我的步骤把程序跑起来在说吧。 请看博客...
本文当是CAS+weblogic应用的部署。带有图解。
CAS示例环境部署及配置
H3C CAS集群管理技术白皮书.docx
NULL 博文链接:https://guoruisheng-163-com.iteye.com/blog/583209
cas单点登录测试环境搭建步骤,很全面,供大家参考
10.CAS-redisCluster集群存储ticket(相应redis必须配置成cluster集群) 11.CAS-加密存储ticket 12.CAS-实习动态验证码 13.CAS-实习自定义登录 14.CAS-实现自定义返回用户登录信息 15.CAS-页面缓存记住我 ----------...
cas4.2.7服务端+cas客户端+示例程序+环境搭建之服务端war包 请看博客:http://blog.csdn.net/pucao_cug/article/details/70182968 该war文件是cas4.2.7的服务端的war包。服务端 的war内我已经对WEB-INF文件夹中的web...
H3C CAS,里面有5个文件夹,分别是经验文件夹、配置案例、开局手册.。。。。。。。。。。。。。。。。。。。。。
基于CAS集群的单点失效问题解决方案,图书馆下载的论文,希望对大家有用。
cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x...
CAS协议,包括cas1.0和cas2.0的协议,cas 协议分为两部分,一部分是票据-ticket,一部分是url。
cas6.3版本 tomcat环境准备好,mysql设置成application.properties中提示,thekeystore自己生成放入tomcat并需要在jdk中导入证书
H3C_CAS虚拟机搭建双机热备环境方案及报告 ) H3C_CAS_3.0虚拟机防病毒操作指导书 H3C_CAS端口镜像特性操作指导书 H3C_CAS主机时间同步操作指导书 H3C_CAS资源模糊搜索特性说明书 H3C_CAS云彩虹2.0操作指导书 H3...
网上关于CAS的技术文章鱼龙混杂,我在这里整理出比较优秀和好用的文章,结合起来可以完成CAS的搭建
加了ad域的windows电脑,用cas 的spnego可以实现登录电脑后,应用免登录。但是单点存在风险,需要高可用集群,但是国内没有任何相关资料,本人经过重重艰难,自己探索,终于把集群给搞了出来。成果方案作为资料,供...
cas4.2.7 实现其他系统和cas互相认证互信 cas4.2.7 实现其他系统和cas互相认证互信 cas4.2.7 实现其他系统和cas互相认证互信
H3C CAS 3.0版 H3C CAS 3.0产品培训胶片 H3C CAS-云计算管理平台技术白皮书V2.0 H3C CAS-云计算管理平台 安装指导-5W101-整本手册 H3C CAS-维护手册V2.0 H3C CAS-工程开局指导手册V2.0 H3C CAS-Rest API H3C ...