CAS单点登出:二

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_32143169/article/details/78183479

CAS单点登出问题及解决 二 (文章摘自笔者发在自己公司内部论坛的文章:谢绝转载)   


背景:基于CAS单点登出 双击问题,第一部CAS单点登出一未实现,所以拍摄了第二部~~~


原因:在单机的情况下,cas-server会发送登出请求到cas-client,cas-client会过滤到登出请求,然后清除tomcat的session。在集群模式下,只有一台cas-client能过滤到cas-server发过来的请求,所以cas-client的登出有很大几率会失败!


解决方案:
1:cas-server连续发送5次。这种情况下,虽然很大几率使每个cas-client都能过滤到登出请求,但是还是存在侥幸的现象。(排除)
2:  IP绑定 ip_hash,这样每个访客固定访问一个后端服务器,这样会固定死了负载规则!(排除)
3: 在第一个接收到登出请求的cas-client,向其它几台cas-client发送登出请求!




操作:1>引入三个类HttpClient.java,NewSingleSignOutFilter.java,SimpleHttpClient.java   (附件)



2>修改CAS Single Sign Out Filter过滤器,使用我们新加入工程的NewSingleSignOutFilter.java。
    新加入一个初始化参数casServerList,为了初始化服务器列表。(集群环境用逗号隔开)
  1. <filter>
  2. <filter-name>CAS Single Sign Out Filter</filter-name>
  3. <filter-class>com.yixin.platform.logout.NewSingleSignOutFilter</filter-class>
  4. <init-param>
  5. <param-name>casServerUrlPrefix</param-name>
  6. <param-value>${casServerUrlPrefix}</param-value>
  7. </init-param>
  8. <init-param>
  9. <param-name>casServerList</param-name>
  10. <param-value>${casServerList}</param-value>
  11. <!--eg: http://localhost:8097/platform-web/shiro-cas,http://localhost:8097/platform-web/shiro-cas -->
  12. </init-param>
复制代码




附:注意事项:在NewSingleSignOutFilter.java中引用了另外的2个类,所以请注意修改import包的地址,根据实际情况来~~~~


3个类的下载地址 http://download.csdn.net/download/qq_32143169/10012327


展开阅读全文

没有更多推荐了,返回首页