天天看點

Cas(08)——單點登出

單點登出

目錄

<a href="#_Toc401242641">1.1     Cas Client端配置單點登出</a>

<a href="#_Toc401242642">1.2     Cas Server端禁用單點登出</a>

       單點登出功能跟單點登入功能是相對應的,旨在通過Cas Server的登出使所有的Cas Client都登出。Cas Server的登出是通過請求“/logout”發生的,即如果你的Cas Server部署的通路路徑為“https://localhost:8443/cas”時,通過通路“https://localhost:8443/cas/logout”可以觸發Cas Server的登出操作,進而觸發Cas Client的登出。在請求Cas Server的logout時,Cas Server會将用戶端攜帶的TGT删除,同時回調該TGT對應的所有service,即所有的Cas Client。Cas Server中對應的TGT失效時預設也會觸發同樣的操作。Cas Client如果需要響應該回調,進而在Cas Client端進行登出操作的話就需要有對應的支援。具體來說,需要在Cas Client應用的web.xml檔案中添加如下Filter和Listener。

   &lt;listener&gt;

   &lt;listener-class&gt;org.jasig.cas.client.session.SingleSignOutHttpSessionListener&lt;/listener-class&gt;

   &lt;/listener&gt;

   &lt;filter&gt;

      &lt;filter-name&gt;casSingleSignOutFilter&lt;/filter-name&gt;

      &lt;filter-class&gt;org.jasig.cas.client.session.SingleSignOutFilter&lt;/filter-class&gt;

   &lt;/filter&gt;

   &lt;filter-mapping&gt;

      &lt;url-pattern&gt;/*&lt;/url-pattern&gt;

   &lt;/filter-mapping&gt;

       SingleSignOutFilter需要配置在所有Filter之前,當Cas Client通過Cas Server登入成功,Cas Server會攜帶生成的Service Ticket回調Cas Client,此時SingleSignOutFilter會将Service Ticket與目前的Session綁定在一起。當Cas Server在進行logout後回調Cas Client應用時也會攜帶該Service Ticket,此時Cas Client配置的SingleSignOutFilter将會使對應的Session失效,進而達到登出的目的。

       SingleSignOutHttpSessionListener用于在Cas Client應用中的Session過期時将其從對應的映射關系中移除。

       單點登出功能預設在Cas Server端是啟用的。可能因為某種原因使用者想禁用它。在Cas Server的WEB-INF/spring-configuration目錄下有一個argumentExtractorsConfiguration.xml檔案,其中定義了兩個ArgumentExtractor類型的bean,一個是針對于Cas協定的,一個是針對于SAMP1.1協定的,但是它們都定義了一個共同的屬性disableSingleSignOut,如下所示,該值對應的是一個屬性替換變量,預設為false。

   &lt;bean

      id="casArgumentExtractor"

      class="org.jasig.cas.web.support.CasArgumentExtractor"

         p:httpClient-ref="noRedirectHttpClient"

         p:disableSingleSignOut="${slo.callbacks.disabled:false}" /&gt;

   &lt;bean id="samlArgumentExtractor" class="org.jasig.cas.web.support.SamlArgumentExtractor"

             p:httpClient-ref="noRedirectHttpClient"

             p:disableSingleSignOut="${slo.callbacks.disabled:false}" /&gt;

       在前面的内容中已經介紹過,Cas Server的所有屬性替換變量都是定義在WEB-INF/cas.properties檔案中的。是以如果需要禁用Cas Server的logout功能,我們可以在cas.properties檔案中指定“slo.callbacks.disabled=true”。

(注:本文是基于Cas Server3.5.2和Cas Client3.1.11所寫)

繼續閱讀