cas客户端集群无法登出问题
2015-10-16 本文已影响0人
zero123
-
问题描述
cas server 广播的登出请求,如果是接收到该请求的客户端是集群客户端,则无法确保集群的客户端能够顺利登出
-
部署环境
-
cas client 1
apache
A:http://client1.cas.com
tomcat
A1:http://client1.cas.com:8085
A2:http://client1.cas.com:8086
A3:http://client1.cas.com:8086 -
cas client 2
B: http://client2.cas.com -
cas server
https://server.cas.com:8443/cas -
解决方法说明
集群A有客户端A1,A2,A3。客户端B登出,向cas server发出注销请求, 接着cas server 就会向所有客户端广播登出请求后,假设集群A中的A1接收到请求,如果session在A1,就退出A1就可以,假如session不在A1,由A1广播给集群里面的其他A2,A3,保证集群A可以登出。
-
代码
1、 web.xml 改写SingleSignOutFilter,SingleSignOutHttpSessionListener替换掉原来的两个类
<!-- cas 单点登出 -->
<filter>
<filter-name>SingleSignOutFilter</filter-name>
<filter-class>com.cas.SingleSignOutFilter</filter-class>
<!-- <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class> -->
</filter>
<filter-mapping>
<filter-name>SingleSignOutFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>com.cas.SingleSignOutHttpSessionListener</listener-class>
<!-- <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class> -->
</listener>
2、 applicationContext.xml 配置cas客户端集群节点地址,用于cas客户端集群登出 见SingleSignOutFilter
<util:list id="clusterNodeUrls" list-class="java.util.ArrayList">
<value>http://client1.cas.com:8085</value>
<value>http://client1.cas.com:8086</value>
<value>http://client1.cas.com:8087</value>
</util:list>
3、 改写的SingleSignOutFilter,SingleSignOutHandler


