使用Java Servlet的CAS服务器单点登出

时间:2014-08-31 15:55:33

标签: java servlets web.xml cas jasig

我正在尝试使用Java Servlet实现CAS Single Sign Out并在web.xml中过滤映射 web.xml中的Filter就是这样的。

<filter>
   <filter-name>CAS Single Sign Out Filter</filter-name>
   <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
  </filter>

<listener>
    <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>

<filter-mapping>
   <filter-name>CAS Single Sign Out Filter</filter-name>
   <url-pattern>/out</url-pattern>
</filter-mapping>

并且&#39; / out&#39; url模式,调用包含session.invalidate()方法的java servlet,然后重定向cas / logout /。但我仍然无法正常退出。

这是我的日志:

DEBUG [http-bio-8080-exec-10] (HashMapBackedSessionMappingStorage.java:46) - Attempting to remove Session=[]
DEBUG [http-bio-8080-exec-10] (HashMapBackedSessionMappingStorage.java:55) - No mapping for session found.  Ignoring.

请帮忙。提前谢谢。

2 个答案:

答案 0 :(得分:0)

您的日志表明在CAS应用程序中找不到您的特定会话的映射。可能的原因可能是CAS应用程序服务器未用于登录,因此没有浏览器会话和令牌的映射。典型的流程是这样的。您尝试访问应用程序A的受保护资源,并重定向到CAS应用程序登录页面。您输入身份验证详细信息并CAS验证您的详细信息并向您发出令牌,然后将令牌重定向到应用程序A,其中应用程序A再次调用CAS服务器来验证令牌,并且成功时,与应用程序A的会话被认为是经过身份验证的。在进一步访问应用程序A时,不需要进一步的身份验证。在注销应用程序A时,确保使A上的会话无效(使用servlet执行此操作),然后重定向到CAS服务器的注销URL,以便它也可以在CAS服务器上注销会话。

答案 1 :(得分:0)

SingleSignOutFilter独立于其他CAS过滤器(如票证验证过滤器)工作。因此,当将CAS票证传递到您的应用程序时,您需要将其映射到两个URL,以及当CAS发出单个注销请求时,将其映射到URL。

因此,在最简单的情况下,您只需要更改代码的这一部分:

<filter-mapping>
    <filter-name>CAS Single Sign Out Filter</filter-name>
    <url-pattern>/out</url-pattern>
</filter-mapping>

...对此:

<filter-mapping>
    <filter-name>CAS Single Sign Out Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

您也可以查看最新的documentation for configuring Single Sign Out以获得更多详细信息。