2014-08-31 85 views
1

我正尝试在web.xml中使用Java Servlet和过滤器映射来实现CAS单点登出。
web.xml中的过滤器就像这样。CAS服务器使用Java Servlet进行单点登出

<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> 

而上 '/出' URL模式,调用的Java Servlet它由session.invalidate()方法,之后重定向CAS /注销/。但是我仍然无法正常注销。

这是我的日志:

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. 

请帮助。提前致谢。

回答

0

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

+0

谢谢先生,回答我的问题。我正如你所说那样做。我使用session.invalidate(),然后通过使用response.sendRedirect(“CAS服务器注销URL”)重定向到cas url的注销url;它成功地重定向到cas注销url。但是,当我点击登录按钮时,它再次能够登录。 – iamrameshkr 2014-08-31 17:24:01

+0

我正在做类似于@iamrameshkr的东西,并得到相同的结果。也许我的期望是错误的?我认为如果我添加过滤器,它也会自动使CAS服务器上的会话失效(例如验证令牌时)。那么[casServerUrlPrefix'过滤器参数](https://github.com/Jasig/java-cas-client#configuration-1)的目的是什么? – watery 2016-04-26 14:06:50