一、CAS 介紹
CAS 是Yale大學發起的一個開源項目,旨在為Web應用系統提供一種可靠的單點登錄方法,CAS在2004年12月正式成為JA-SIG的一個項目。
CAS 具有以下特點:
開源的企業級單點登錄解決方案。
CAS Server為需要獨立部署的Web應用。
CAS Client支持非常多的客戶端(這里指單點登錄系統中的各個 Web 應用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。
二、CAS 原理和協議
1、CAS 包含兩個部分: CAS Server 和 CAS Client ,CAS Client嵌入在應用程序中,而CAS Server是獨立組件。
CAS Server :是一個war包,CAS框架已經提供,只需要把部署到web服務器上即可,負責驗證用戶並授權訪問應用程序。
CAS Client:處理對客戶端受保護資源的訪問請求,需要登錄時,重定向到 CAS Server。不需要對這個部分進行過多編碼,進行簡單配置即可。
2、CAS協議是一種基於票證(ticket)的協議。
關鍵概念:
TGT(Ticket Granted Cookie):用戶的SSO會話。
ST(Service Ticket):服務票據,在URL中作為GET參數傳輸,表示CAS服務器授予給特定用戶的對於應用程序的訪問權限。
3、CAS標准流程
三、構建CAS
目前最新版本是cas-6.3.0-RC2,依賴JDK11,官網建議使用WAR-Overlay方式構建CAS。
所謂的WAR-Overlay方式:會引入 CAS 項目組已經編譯好的某一個可運行的二進制基礎版本,然后在此基礎上或者通過添加配置插入自己需要的模塊,或者重寫一些實現方法來定制個性化的功能,而基礎版本中的代碼會被覆蓋,從而項目會以你希望的方式來執行
我們這里選用cas-overlay-template-5.2(https://github.com/apereo/cas-overlay-template/tree/5.2),依賴jdk1.8。
構建步驟:
1、克隆代碼
git clone -b 5.2 https://github.com/apereo/cas-overlay-template.git

2、導入IDE,IDE選擇idea
為什么導入IDE?
(1)編譯構建,拿到我們需要的war,當然使用mvn或build.cmd命令也可以構建;
(2)就是為了二次開發。WAR-Overlay方式可以通過引入可插拔的模塊或者是用自己重寫的java方法來覆蓋基礎版本中的class實現來擴展CAS。


在 IDE 構建的過程會生成target 目錄,另外還會生成一個 overlay 文件夾,里面放置從 maven 倉庫取下來的官方構建好的基礎版本。

3、二次開發前的一些設置和調整
我們需要基於官方基礎版本的目錄結構來調整本地項目的目錄結構。
(1)先看一下官方 overlay 基礎版本的目錄結構:

application.properties文件中存放了所有配置屬性,而org/apereo/cas是官方基礎版本的代碼路徑。
(2)本地基於官方重新實現的方法代碼必須放到對應的路徑下才會覆蓋基礎版本中自帶的 class 文件。
因此我們的本地項目做如下調整:

(3)在調整后的目錄結構中,我們引入了第一個配置文件application.properties,引入 application.properties 文件是為了調整配置參數,這種配置文件不會自動覆蓋基礎版本中的同名配置文件,需要在 pom.xml 中手動聲明,該聲明也就是告知在構建時排除掉官方基礎中帶的,用自己修改過的。注意排除的路徑為 overlay 基礎版本中的路徑。


(4)重寫代碼則只需要路徑一致就會自動覆蓋。
(5)pom.xml文件中還有兩個地方也簡單說明一下,cas.version 設置使用的 cas-overlay 版本。

在profiles中的dependencies里添加依賴,也是在此處引入新模塊,當然也可以不在 profiles 中寫依賴,直接在和 profiles 平級的 dependencies 里寫依賴。

參考:
官網
cas源碼下載
官方建議使用war-overlay安裝
以下為老版本的部署方案參考
