CAS集群部署的问题

CAS单点部署时非常容易配置,且稳定性较好,非常适合中小规模应用系统使用。但在大规模应用系统,尤其是集群应用系统下,经常遇到问题。

一、CAS集群部署

  由于CAS Server是一个Web应用,因此可部署在Tomcat等容器中。直接部署CAS集群并使用负载均衡设备后,由于每次访问的CAS Server不固定,会发生通行证丢失。
  解决方法:配置TOMCAT集群及Session复制,解决CAS Server Session复制。详细配置方法见TOMCAT Session复制的配置。

二、CAS集群使用时,Ticket存储未做数据共享

  当用户登录后,Ticket存储在CAS Server中,由于这部分数据未保存在Session中,仅靠TOMCAT Session复制无法解决问题。默认配置下,CAS Server使用org.jasig.cas.ticket.registry.DefaultTicketRegistry把Ticket数据保存在 HashMap中,因此多台CAS Server无法共享数据。导致用户登录及退出均存在问题。
  解决方法:用JBossCacheTicketRegistry(数据共享)解决数据共享问题,使多台CAS Server使用相同的存储区域管理Ticket。

三、CAS集群无法正常Logout

  根据CAS Server工作流程,当收到Logout请求后,CAS Server会删除自身存储的有关当前用户的所有Ticket票据,“问题二”的解决方法已经解决了多台CAS Server删除票据的问题。但随后从CAS Server会发起HTTP POST请求到应用服务器,该请求中具备“logoutRequest”标志,应用服务器的SingleSignOutFilter接收到该请求后在应用服务器端进行用户登出操作。该操作主要是将应用服务器端的CAS Client中保存的用户Session数据失效,达到客户端登出效果。即,对于CAS系统,必须Server端和Client均进行登出操作,用户才会真正登出。cas退出采用的是异步操作,客户端是否退出成功也不关心。
  CAS Server的这个工作流程,在应用集群部署的情况下带来一系列问题。由于应用服务器集群化,且一般会使用Session复制,当CAS Server向应用服务器发起Logout请求时,仅针对一台服务器发起请求,导致应用服务器没有全部退出,使得用户使用登出操作时,有时可以退出,有时不能退出,用户体验很差。

解决方法:修改HttpClient的源码,具体是修改call方法,此方法是单点退出的核心方法。

 

 

你可能感兴趣的:(tomcat,应用服务器,工作,Web,配置管理)