歡迎光臨
每天分享高質量文章

CAS 實現 SSO 單點登錄

(點擊上方公眾號,可快速關註)


來源:範宗雲 ,

fanlychie.github.io/post/java-cas-server-client-configure.html

環境

cas-server-4.1.8,cas-client-3.4.0,Java-8,Maven-3,Tomcat-7.0.72

CAS Server 安裝

點此進入 CAS 下載串列,選擇下載 cas-4.1.8.zip。

https://github.com/apereo/cas/releases

解壓縮 cas-4.1.8.zip 併進入 cas-server-webapp 目錄,在當前目錄打開 cmd 並執行安裝命令。

mvn -e -ff clean install -Dmaven.test.skip=true

經親身測試(自己拉的電信12M網絡),該安裝過程非常漫長,主要因為鏡像原因導致依賴包下載非常慢,此過程需靜心等待。或直接下載我已經打好包的 cas.war 檔案(註:該檔案的依賴包版本有稍做修改,此不影響正常使用)。

安裝完成後,在 cas-server-webapp/target 目錄下可以看到 cas.war 檔案,該檔案便是 cas server 應用服務的 war 包。

cas server 安全認證是基於 https 的,這裡使用 JDK 自帶的 keytool 工具生成數字證書,生產環境系統的應用需要到證書提供商處購買證書。證書的生成及 Tomcat 的配置可參考文章:keytool 生成數字證書 – tomcat https 配置

https://fanlychie.github.io/post/java-keytool-tomcat-https.html

首先確保 Tomcat 的 https 可以正常訪問,將 cas.war 檔案拷貝到 apache-tomcat-7.0.72/webapps 下進行發佈,啟動 Tomcat,訪問 https://www.fanlychie.com:8443/cas。

上圖是用火狐瀏覽器打開的鏈接,選擇高級 -> 添加例外 -> 確認安全例外。

用戶名和密碼在 apache-tomcat-7.0.72/webapps/cas/WEB-INF/deployerConfigContext.xml 配置檔案中,找到並打開該檔案,大概在 105 行

    class=”org.jasig.cas.authentication.AcceptUsersAuthenticationHandler”>

   

       

           

       

   

可以看到預設的用戶名是 casuser,密碼是 Mellon。

看到上圖的頁面,表明 cas server 已經部署成功。

CAS Server 配置基於資料庫用戶認證

回到 cas-4.1.8.zip 解壓縮的目錄,併進入 cas-server-support-jdbc 目錄,在當前目錄打開 cmd 並執行安裝命令

mvn -e -ff clean install -Dmaven.test.skip=true

安裝完成後在 target 目錄得到 cas-server-support-jdbc-4.1.8.jar 檔案。

將該檔案拷貝到 apache-tomcat-7.0.72/webapps/cas/WEB-INF/lib 目錄下,並向此目錄添加 c3p0-0.9.1.2.jar,mysql-connector-java-5.1.17.jar 兩個檔案。嫌麻煩的話,點此下載這三個 jar 包的壓縮包檔案。

http://pan.baidu.com/s/1pLIrdWn

再次打開 apache-tomcat-7.0.72/webapps/cas/WEB-INF/deployerConfigContext.xml 檔案,大概在第 54 行。

   

       

           

           

           

           

           

       

   

   

   

   

       

   

按以上配置註銷掉第二個 entry 並添加一個 entry。接著在後面添加兩個 bean 配置。

   

   

   

   

   

   

   

   

   

   

   

   

   

   

    p:dataSource-ref=”dataSource”

    p:sql=”SELECT passwd FROM user WHERE name = ?” />

其中 cas_test_db 資料庫中的 user 建表陳述句為

CREATE TABLE `user` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `name` varchar(255) NOT NULL,

  `passwd` varchar(255) NOT NULL,

  PRIMARY KEY (`id`)

)

重啟 Tomcat,訪問 https://www.fanlychie.com:8443/cas,用資料庫中的 name/passwd 作為用戶名和密碼登錄系統,若登錄成功,表明配置已成功。

CAS Client 客戶端使用和配置

使用 maven 創建兩個 web 專案 cas-client1,cas-client2。點此下載 demo 檔案。

cas-client1 專案 pom.xml 配置

   

        org.jasig.cas.client

        cas-client-core

        3.4.0

   

   

        org.slf4j

        slf4j-log4j12

        1.7.12

   

   

       

            org.apache.tomcat.maven

            tomcat7-maven-plugin

            2.2

           

                /

                8881

                8081

                UTF-8

                org.apache.coyote.http11.Http11NioProtocol

                false

                C:\Users\fanlychie\.keystore\selfissue.jks

                123654

                JKS

                http://localhost:8081/manager/html

           

       

   

首先必須確保專案 https 協議可以正常訪問,否則 cas server 無法認證。

選中專案 -> Run As -> Maven build… -> tomcat7:run

訪問 https://www.fanlychie.com:8081,若能訪問到,表明 Tomcat 已準備好。

cas-client1 專案 web.xml 配置


   

        org.jasig.cas.client.session.SingleSignOutHttpSessionListener

   

 

   

        CAS Single Sign Out Filter

        org.jasig.cas.client.session.SingleSignOutFilter

       

            casServerUrlPrefix

           

            https://www.fanlychie.com:8443/cas

       

   

   

        CAS Single Sign Out Filter

        /*

   

 

   

        CAS Authentication Filter

        org.jasig.cas.client.authentication.AuthenticationFilter

       

            casServerLoginUrl

           

            https://www.fanlychie.com:8443/cas/login

       

       

            serverName

           

            https://www.fanlychie.com:8081

       

   

   

        CAS Authentication Filter

        /*

   

   

        CAS Validation Filter

        org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter

       

            casServerUrlPrefix

           

            https://www.fanlychie.com:8443/cas

       

       

            serverName

           

            https://www.fanlychie.com:8081

       

   

   

        CAS Validation Filter

        /*

   

   

        CAS HttpServletRequest Wrapper Filter

        org.jasig.cas.client.util.HttpServletRequestWrapperFilter

   

   

        CAS HttpServletRequest Wrapper Filter

        /*

   

   

        CAS Assertion Thread Local Filter

        org.jasig.cas.client.util.AssertionThreadLocalFilter

   

   

        CAS Assertion Thread Local Filter

        /*

   

   

        index.jsp

   

以上是 cas client 標準配置,具體信息可參考 https://github.com/apereo/java-cas-client。

cas-client2 配置基本與 cas-client1 配置相同,詳情可見 demo,同時啟動這兩個專案

  • cas-client1 – https://www.fanlychie.com:8081

  • cas-client2 – https://www.fanlychie.com:8082

訪問其中的一個專案 https://www.fanlychie.com:8081,會自動跳到

https://www.fanlychie.com:8443/cas/login?service=https%3A%2F%2Fwww.fanlychie.com%3A8081%2F。

由於還沒有登錄過 CAS 認證系統,CAS 認證系統攔截到你的訪問,進入到認證系統登錄界面,當登錄成功後,CAS 服務會跳轉向到你剛剛訪問的地址。

當你訪問 https://www.fanlychie.com:8082,此時是不需要登錄了的。

至此,CAS 實現 SSO 單點登錄系統搭建結束。

【關於投稿】


如果大家有原創好文投稿,請直接給公號發送留言。


① 留言格式:
【投稿】+《 文章標題》+ 文章鏈接

② 示例:
【投稿】《不要自稱是程式員,我十多年的 IT 職場總結》:http://blog.jobbole.com/94148/

③ 最後請附上您的個人簡介哈~



看完本文有收穫?請轉發分享給更多人

關註「ImportNew」,提升Java技能

赞(0)

分享創造快樂