我有一个 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 server 和 app2 的 URL 似乎都构造得很好,但是,没有发生实际的重定向。我在 cas 服务器的控制台上看不到任何打印内容(再次记录日志级别:调试)
这是我的 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 之前没有过滤器定义,只有应用程序显示名称和欢迎文件列表。
我已经阅读过类似的问题(注意:我不使用 spring 或 jsp 并且用户在新选项卡中打开 app2 后仍处于登录状态)但解决方案对我不起作用或根本没有给出。