访问:https://server.com/cas/logout后,访问客户端的项目还可以进入,研究了一下午终于总结了几个登出无效的原因:
1、最基本的配置:登出过滤器,该过滤器必须在cas校验过滤器之前,也可以说该过滤器在web.xml中所有过滤器之前。
<!-- 该过滤器用于实现单点登出功能,登出功能中属于必配项 --> <filter> <filter-name>CAS Single Sign Out Filter</filter-name> <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class> </filter> <filter-mapping> <filter-name>CAS Single Sign Out Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 用于单点退出,该过滤器用于实现单点退出功能 --> <listener> <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class> <stener>
2、上面配置如果没问题,就是域名的问题了,我就是因为这个原因纠结了一下午:
不能使用不管是服务端还是客户端不能使用localhost
如果使用localhost在访问logout时,服务端日志会有警告:
Error Sending message to url endpoint,
因为如果客户端使用localhost访问的项目,在发送登出请求到服务端时,服务器就会接到来自客户端的请求,并且地址为‘localhost/xxx’,所以,服务器就会发送请求至localhost销毁ticket,但是localhost对服务端来说是访问本地,所以销毁ticket失败,现在明白了吧。
注意要在服务端与客户端同时修改hosts文件,确保服务端与客户端通过设置的域名能够互相访问成功,然后在注销就可以成功了。