1. 程式人生 > >1、[置頂] CAS單點登入原始碼解析之【客戶端】

1、[置頂] CAS單點登入原始碼解析之【客戶端】

前期準備:

2.cas-client-3.2.1-release.zip
3.應用系統webapp(http://127.0.0.1:8090/webapp/main.do)
4.CAS單點登入伺服器端(http://127.0.0.1:8081/cas-server/)
        本次討論包括CAS單點登入客戶端的部分原始碼,以及在此基礎上進行二次開發,因此需要修改部分CAS客戶端的原始碼,原始碼部分的修改在下面進行討論。關於CAS伺服器端的原始碼分析,請參考另一篇文章http://blog.csdn.net/dovejing/article/details/44523545 其中cas-client-core-3.2.1.jar為CAS客戶端的核心jar包,cas-client-3.2.1-release.zip為CAS客戶端的原始碼zip包。 web.xml部分程式碼
  1. <filter>
  2.     <filter-name>CASFilter</filter-name>
  3.     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  4. </filter>
  5. <filter>
  6.     <filter-name>CASValidationFilter</filter-name>
  7.     <filter-class>org.springframework.web.filter.DelegatingFilterProxy
    </filter-class>
  8. </filter>
  9. <filter>
  10.     <filter-name>initLoginUserFilter</filter-name>
  11.     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  12. </filter>
  13. <filter-mapping>
  14.     <filter-name>CASFilter</filter-name
    >
  15.     <url-pattern>/*</url-pattern>
  16. </filter-mapping>
  17. <filter-mapping>
  18.     <filter-name>CASValidationFilter</filter-name>
  19.     <url-pattern>/*</url-pattern>
  20. </filter-mapping>
  21. <filter-mapping>
  22.     <filter-name>initLoginUserFilter</filter-name>
  23.     <url-pattern>/*</url-pattern>
  24. </filter-mapping>

spring-context.xml部分程式碼

  1. <beanid="CASFilter"class="com.master.client.filter.AuthenticationFilter"init-method="initConfig"/>
  2. <beanid="CASValidationFilter"class="com.master.client.filter.TicketValidationFilter"init-method="initConfig"/>
  3. <beanid="initLoginUserFilter"class="com.master.client.filter.InitLoginUserFilter"init-method="initConfig"/>

cas_config.properties程式碼

  1. service = http://127.0.0.1:8090/webapp/main.do  
  2. casServerUrlPrefix = http://127.0.0.1:8081/cas-server/  
  3. casServerLoginUrl = http://127.0.0.1:8081/cas-server/login  
  4. casServerLogoutUrl = http://127.0.0.1:8081/cas-server/logout  
  5. errorUrl = http://127.0.0.1:8081/cas-server/error  

        首先,從web.xml配置資訊可以看出,有三個過濾器負責處理單點登入流程,其中前兩個為流程必須處理的過濾器,最後一個是我新增加的過濾器,主要功能是初始化使用者資訊和許可權。既然是原始碼解讀,我們必然要看原始碼。下面就從CAS客戶端的原始碼給大家進行解讀CAS單點登入客戶端的工作流程。之後會單獨寫一篇關於CAS單點登入伺服器的原始碼解讀的文章。

AuthenticationFilter

        從單點登入第一個過濾器開始解讀,原始碼中的第一個過濾器是AuthenticationFilter,因為業務需求對此過濾器進行了二次開發。原始碼是從web.xml配置檔案中讀取初始化引數,我對此做了修改,從properties檔案中讀取初始化引數。把單點登入的配置引數定義到properties檔案中,這樣做的好處是對初始化配置引數統一管理,一目瞭然。原始碼走起。

AuthenticationFilter的父類AbstractCasFilter的初始化方法,主要工作是從properties中獲取單點登入的系統引數。使大家看的更清楚,原始碼中省略了日誌的輸出。

  1. publicvoid initConfig() throws ServletException {  
  2.     Properties conf = PropertiesUtil.getConfigProperties();  
  3.     setServerName(conf.getProperty("serverName"null));  
  4.     setService(conf.getProperty("service"null));  
  5.     setArtifactParameterName(conf.getProperty("artifactParameterName""ticket"));  
  6.     setServiceParameterName(conf.getProperty("serviceParameterName""service"));  
  7.     setEncodeServiceUrl(parseBoolean(conf.getProperty("encodeServiceUrl""true")));  
  8.     //登入錯誤跳轉到該url地址
  9.     setErrorUrl(conf.getProperty("errorUrl"null));  
  10.     //初始化配置檔案(AuthenticationFilter類)
  11.     initInternalConfig(conf);  
  12.     init();//初始化
  13. }  

AuthenticationFilter的初始化方法。主要工作是從properties中獲取單點登入的系統引數。使大家看的更清楚,原始碼中省略了日誌的輸出。

  1. publicvoid initInternalConfig(Properties conf) throws ServletException {  
  2.     if (!isIgnoreInitConfiguration()) {  
  3.         setCasServerLoginUrl(conf.getProperty("casServerLoginUrl"null));  
  4.         setRenew(parseBoolean(conf.getProperty("renew""false")));  
  5.         setGateway(parseBoolean(conf.getProperty("gateway""false")));  
  6.         String gatewayStorageClass = conf.getProperty("gatewayStorageClass"null);  
  7.         if (gatewayStorageClass == null)  
  8.             return;  
  9.         try {  
  10.             this.gatewayStorage = ((GatewayResolver) Class.forName(gatewayStorageClass).newInstance());  
  11.         } catch (Exception e) {  
  12.             this.log.error(e, e);  
  13.             thrownew ServletException(e);  
  14.         }  
  15.     }  
  16. }  

AuthenticationFilter的過濾方法。

  1. publicfinalvoid doFilter(final ServletRequest servletRequest,  
  2.         final ServletResponse servletResponse, final FilterChain filterChain)  
  3.         throws IOException, ServletException {  
  4.     final HttpServletRequest request = (HttpServletRequest) servletRequest;  
  5.     final HttpServletResponse response = (HttpServletResponse) servletResponse;  
  6.     

    相關推薦

    1[] CAS登入原始碼解析客戶

    前期準備: 2.cas-client-3.2.1-release.zip 3.應用系統webapp(http://127.0.0.1:8090/webapp/main.do) 4.CAS單點登入伺服器端(http://127.0.0.1:8081/cas-server/)        

    CAS登入原始碼解析伺服器

    前期準備: 2.應用系統webapp1(http://127.0.0.1:8090/webapp1/main.do) 3.應用系統webapp2(http://127.0.0.1:8091/webapp2/main.do) 4.CAS單點登入伺服器端(http://127

    CAS登入原理解析

    1、基於Cookie的單點登入的回顧        基於Cookie的單點登入核心原理:       將使用者名稱密碼加密之後存於Cookie中,之後訪問網站時在過濾器(filter)中校驗使用者許可權,如果沒有許可權

    jasig cas登入配置筆記

    以上配置完成後還有一點問題,就是cas client的配置完成後,登入A應用,然後登入B應用,需要重新認證. 仔細閱讀文件,發現原來jasig Cas不能支援非SSL方式的統一登入.實際上登入首頁上已經提示: Non-secure Connection You ar

    CAS登入客戶服務)搭建

    一、單點登入簡介 單點登入(Single Sign On),簡稱為 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。 CAS 是一個開源的企業級單點登入系統,CAS 包含兩個部分:CAS Serve

    cas登入原理簡單介紹(1

    SSO簡介 1.1 單點登入定義 單點登入(Single sign on),英文名稱縮寫SSO,SSO的意思就是在多系統的環境中,登入單方系統,就可以在不用再次登入的情況下訪問相關受信任的系統。也就是說只要登入一次單體系統就可以。計劃在專案中加入單點登入,開發

    CAS登入1):cas-4.0.0-server 簡單部署

    下載CAS4.0.0 選擇4.0.0 的原因是:4.0.0以後打包比較麻煩,4.0.0版本內有打包好的war 下載地址 github專案地址 cas 4.0.0地址 解壓找到war包部署 解壓 cas-server-4.

    CAS登入疑問解答

    一、不落俗套的開始 1、背景介紹 單點登入:Single Sign On,簡稱SSO,SSO使得在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。 CAS框架:CAS(Central Authentication Service)是實現SSO單點登入的框架。 2、盜一張

    CAS登入詳解

    1.      CAS 簡介 簡單的 SSO 的體系中,會有下面三種角色:        1 , User (多個)

    CAS登入-客戶整合(shirospringbootjwtpac4j)(十)

    CAS單點登入-客戶端整合(shiro springboot jwt pac4j)(十) 由於我們通常在業務上會有以下的使用場景: 移動端通過業務系統鑑權 移動端免登入(登入一次以後) 解決方案: JWT(token認證方案) OAuth(第三方認

    CAS統一登入認證(16): openedx 通過oauth2.0接入cas登入

    openedx 是流行的開源mooc(慕課)平臺,我這安裝的是edx-ginkgo.2-7版本,cas是5.3.2 這個接入頗費了一番周折,總是設定不成功,因為沒有可以直接參考的案例,只有edx的官方站點有些說明,但都是針對google,facebook,github等賬號的第三方oauth2.

    CAS登入-介紹(一)

    CAS單點登入-介紹(一) 由於之前工作需要都是對接現成的單點登陸服務,基於自己興趣目前正在研究CAS單點登陸原理和搭建以及不同的應用場景對接方式。特此來記錄學習的過程以及分享,希望能幫助大家。 1.CAS是什麼? CAS是Central Authenticat

    cas 登入(一)

    對接單點登入不是這個端退出不了,就是使用者賬號實現多模組切換,甚是煩惱   1、cas服務端:下載地址:http://downloads.jasig.org/cas/,cas的服務端和客戶端有許多版本,最新版本和老版本 有很大的區別,目前服務端最新版本為:cas-server-

    spring boot + mybatis + shiro + cas 登入

    該專案是在shiro(三)的基礎上進行修改的,建議首先將shiro的部分了解一下。 CAS的知識點: 單點登入:簡稱SSO,SSO使得在多個應用系統中,使用者只需要登入一次就可以訪問所有互相信任的應用系統 CAS框架:CAS是實現單點登入的框架。 結構:cas分為兩個部分,CAS S

    CAS登入-簡介

    介紹 CAS CAS是一個單點登入框架, 是 Yale 大學發起的一個開源專案,旨在為 Web 應用系統提供一種可靠的單點登入方法,CAS 在 2004 年 12 月正式成為 JA-SIG 的一個專案。程式碼目前在github上管理 SSO 單點登入,英文全稱:Single Sign On(SSO)

    cas登入遇到 supplied credentials: [admin+password] 問題原因以及解決辦法

    最近在寫shiro-cas單點登入demo的時候,真的是問題多多,百度了半天也沒有什麼有用的資訊,服務端部署了一遍又一遍,真的sui(抱怨over..哈哈) 我遇到的問題是服務端配置資料庫連線的時候出現的問題,先回顧一下流程 一、修改deployerConfigContext.xm

    cas登入 (二) 客戶與springboot整合

    在springboot專案中實現cas單點登入統一認證,只需要在專案中配置 cas過濾器即可使用. 1. springboot專案pom.xml中 新增web支援依賴 、cas客戶端依賴包 <dependency> <groupId>org

    SSO CAS登入搭建詳細步驟及原始碼

    1.因為是本地模擬sso環境,而sso的環境測試需要域名,所以需要虛擬幾個域名出來,步驟如下: 2.進入目錄C:\Windows\System32\drivers\etc 3.修改hosts檔案 127.0.0.1  jeesz.cn 127.0.0.1  sso1.

    SSO CAS登入框架學習 搭建詳細步驟及原始碼

    1.瞭解單點登入  SSO 主要特點是: SSO 應用之間使用 Web 協議(如 HTTPS) ,並且只有一個登入入口. SSO 的體系中有下面三種角色: 1) User(多個) 2) Web 應用(多個) 3) SSO 認證中心(一個)  2.SSO 實現包

    Go語言專案整合CAS登入

    網上有高手開源了一個網盤專案:藍眼雲盤,我一看還行,版權也很寬鬆,是MIT,就用到了專案裡面去。 有個問題就是我們專案採用了CAS作為單點登入,而這個藍眼雲盤有自己的一套登入機制。需要改造一下,將單點登入也整合到雲盤中來。 藍眼雲盤專案伺服器端是用GO語言開發的,前端則用了VUE