用CAS實現SSO(單點登錄)+數據庫讀取
1.什么是SSO,什么是CAS.
SSO即單點登錄的意思,而CAS 是 Yale 大學發起的一個開源項目,旨在為 Web 應用系統提供一種可靠的單點登錄方法。
2.CAS認證原理。
從結構上看,CAS 包含兩個部分: CAS 和 CAS 。CAS 需要獨立部署,主要負責對用戶的認證工作;CAS 負責處理對客戶端受保護資源的訪問請求,需要登錄時,重定向到 CAS 。圖1 是 CAS 最基本的協議過程:
CAS 與受保護的客戶端應用部署在一起,以 方式保護受保護的資源。對于訪問受保護資源的每個 Web 請求,CAS 會分析該請求的 Http 請求中是否包含 ,如果沒有,則說明當前用戶尚未登錄,于是將請求重定向到指定好的 CAS 登錄地址,并傳遞 (也就是要訪問的目的資源地址),以便登錄成功過后轉回該地址。用戶在第 3 步中輸入認證信息,如果登錄成功,CAS 隨機產生一個相當長度、唯一、不可偽造的 ,并緩存以待將來驗證,之后系統自動重定向到 所在地址,并為客戶端瀏覽器設置一個 (TGC),CAS 在拿到 和新產生的 過后,在第 5,6 步中與 CAS 進行身份合適,以確保 的合法性。
在該協議中,所有與 CAS 的交互均采用 SSL 協議,確保,ST 和 TGC 的安全性。協議工作過程中會有 2 次重定向的過程,但是 CAS 與 CAS 之間進行 驗證的過程對于用戶是透明的。
另外,CAS 協議中還提供了 Proxy (代理)模式單點登錄cas原理,以適應更加高級、復雜的應用場景,具體介紹可以參考 CAS 官方網站上的相關文檔。
3.了解證書
cas-與cas-通訊安全完全基于https,需要ssl證書,jdk的工具生成的證書用于開發也是夠的,當然正式上線的證書需要使用第三方認證的證書;這里介紹下cas開發的準備工作:生成證書。SSL證書通過在客戶端瀏覽器和Web服務器之間建立一條SSL安全通道( layer(SSL)安全協議是由 公司設計開發。該安全協議主要用來提供對用戶和服務器的認證;對傳送的數據進行加密和隱藏;確保數據在傳送中不被改變,即數據的完整性,現已成為該領域中全球化的標準,所以服務器需要使用ssl證書。
4.配置準備
本例使用環境:
java “1.8.0_91”
8.5.8
cas 4.2.7
java和自己下載,這里提供cas-的項目包,并且該項目包可以連接數據庫并進行驗證。
5.實際操作
5.1創建密鑰庫
命令:
- -alias “” - “RSA” - “D:\keys\.”
5.2在導入密鑰庫
找到的安裝目錄,打開/conf/.xml
找到 這個監聽類的配置,將修改為on
將AJP/1.3協議關閉掉(也就是直接注釋掉)
導入密鑰庫
注意:上面的所需要填寫的是你剛才設置的秘鑰庫的密碼,例如我之前設置的是,所以這里也是填寫。如果填錯會報錯:
java.io.: was with, or was
5.2部署cas服務器。
5.2.1導入數據庫(采用mysql數據庫,創建一個數據庫,并運行以下代碼)
TABLE (
id (15) NOT NULL ’主鍵’,
(30) NULL ’賬號’,
(255) NULL ’密碼’,
valid (1) NULL ‘是否有效’,
KEY(id)
) = =utf8;
插入兩條數據
/*cj用MD5加密后是:
world用MDT加密后是: */
into (id,,,valid) (,’cj’,’’,1),
(,’’,’’,1);
5.2.2在t.xml中增加
p:acquireRetryDelay="2000"
p:idleConnectionTestPeriod="30"
p:preferredTestQuery="select 1" />
5.2.3修改cas.配置文件
這里要注意一些點,cas服務端有一個cas.的配置文件,文件位置隨意放。但是要在cas項目中修改它的文件目錄,不然cas無法運行。
找到cas.后添加一下代碼
cas.jdbc.authn.query.sql= from where =? and valid=true
到了這一步,你的cas服務器就可以運行了。
帳號密碼都是cj
至此單點登錄cas原理,cas服務器的搭建就已經完成。下面配置下端。我們隨便創建一個應用,然后打開web.xml
插入以下代碼:
org.jasig.cas.client.session.SingleSignOutHttpSessionListener
casSingleSignOutFilter
org.jasig.cas.client.session.SingleSignOutFilter
casServerUrlPrefix
https://localhost:8090/cas/

casSingleSignOutFilter
/*
CASFilter
org.jasig.cas.client.authentication.AuthenticationFilter
casServerLoginUrl
https://localhost:8090/cas/login
serverName
http://localhost:8080/mytest
useSession

true
redirectAfterValidation
true
ignorePattern
/staticres/css/|/staticres/js/
CASFilter
/*
casHttpServletRequestWrapperFilter
org.jasig.cas.client.util.HttpServletRequestWrapperFilter

casHttpServletRequestWrapperFilter
/*
casAssertionThreadLocalFilter
org.jasig.cas.client.util.AssertionThreadLocalFilter
casAssertionThreadLocalFilter
/*
接著修改cas服務器的src//-.json把
“” : “^(https|imaps)://.*”,
修改為
“” : “^(https|imaps|http)://.*”,
操作完畢,保存,測試下。我們訪問
:8080/
這個項目,如果沒有登錄,它就會跳到CAS登錄服務器
用cj登錄,登錄成功。
至此,我們的教程到此結束。
本教程感謝CSDN博主:
我正是參考了它的教程。
以下是他提供的教程:
關于cas的博客
教程用到的文件和項目包