我有一个CAS 3.5服务器和两个Java客户端(我们称之为app1和app2),我无法单点注销工作。 app1和app2部署在JBoss AS7的不同实例中。
测试用例场景是:
1 - 在浏览器标签中,成功登录app1。
2 - 在另一个标签中,在访问app2时,用户已经登录。(单点登录正常工作)。
3 - 成功注销app1。
4 - 但是,即使页面刷新后,用户仍继续登录app2。 JSESSIONID cookie仍然存在。
当退出app1(步骤3)时,会在app2的控制台上打印(日志级别:调试):
08:15:42,806 DEBUG [org.jasig.cas.client.authentication.Saml11AuthenticationFilter] (http--0.0.0.0-8080-3) no ticket and no assertion found
08:15:42,807 DEBUG [org.jasig.cas.client.authentication.Saml11AuthenticationFilter] (http--0.0.0.0-8080-3) Constructed service url: http://myip:8080/app2
08:15:42,807 DEBUG [org.jasig.cas.client.authentication.Saml11AuthenticationFilter] (http--0.0.0.0-8080-3) redirecting to "https://mycasip:8443/cas/login?TARGET=http%3A%2F%2Fmyip%3A8080%2Fapp2"
仅仅为了记录,cas服务器和app2的URL似乎构造得很好,但是,没有实际的重定向。 我在cas服务器的控制台上看不到任何内容(再次登录级别:debug)
以下是我的web.xml摘录(我使用SAML发送除用户名之外的ldap属性):
<filter>
<filter-name>CAS Single Sign Out Filter</filter-name>
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
<init-param>
<param-name>artifactParameterName</param-name>
<param-value>SAMLart</param-value>
</init-param>
</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>
</listener>
SingleSignOutFilter之前没有过滤器定义,只有app display-name和welcome-file-list。
我已经阅读了类似this one之类的问题(注意:我没有使用spring或jsp,用户在新标签中打开app2后仍然登录)但是解决方案对我不起作用或者没有完全没有。