我正在尝试使用Java Servlet和web.xml中的过滤器映射实现CAS Single Sign Out。web.xml中的过滤器是这样的。
<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>
然后在'/ out'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.
请帮助。预先感谢。
您的日志表明,在CAS应用程序中未找到针对您特定会话的映射。可能的原因可能是CAS应用程序服务器未用于登录,因此没有浏览器会话和令牌的映射。典型的流程是这样的。您尝试访问应用程序A的受保护资源,然后重定向到CAS应用程序登录页面。您输入身份验证详细信息,然后CAS验证您的详细信息并向您颁发令牌,然后将令牌重定向到应用程序A,其中应用程序A再次调用CAS服务器以验证令牌,并在成功后与应用程序A的会话被视为已通过身份验证。在进一步访问应用程序A时,不需要进一步的身份验证。注销应用程序A时,请确保使A上的会话无效(使用servlet进行此操作),然后重定向到CAS服务器的注销URL,以便它也可以注销CAS服务器上的会话。
SingleSignOutFilter
独立于其他CAS过滤器(如票证验证过滤器)工作。因此,当将CAS票证传递到您的应用程序时,您需要将其映射到两个URL,并且在CAS发出单个注销请求时,也需要将其映射到URL。