2014-08-31 84 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