CAS 5.1.x 的搭建和使用(三)—— 經過官方示例來熟悉客戶端搭建

CAS單點登陸系列:html

 

這裏主要有兩件事要作:java

 

第一個就是給客戶端的jre添加和服務端對應的證書git

 

以前咱們已經生成了一個keystore,咱們就直接使用這個keystore生成一個證書,命令以下:github

keytool -exportcert -alias cas -keystore D:/liuyx.keystore -file D:/liuyx.keystore.cer -storepass 123456

 

而後把這個證書導入jre的web

 

注意,這個jre必定要是你跑客戶端的Tomcat的那個jre,api

這裏個人目錄是:C:/Java/jdk1.8.0_91/jre/lib/security/cacerts,剛剛導出的證書的目錄是D:/liuyx.keystore.cer瀏覽器

那麼個人命令就是:服務器

keytool -import -alias cas -keystore C:/Java/jdk1.8.0_91/jre/lib/security/cacerts -file D:/liuyx.keystore.cer

證書庫的密碼是:changeitjava-web

導入完咱們能夠看一下導入的結果:session

keytool -list -keystore C:/Java/jdk1.8.0_91/jre/lib/security/cacerts

密碼同上,能夠看到一堆證書,其中有一個「別名」是cas的,日期是今天,就是咱們剛剛導進去的。

 

當咱們作完這一切CAS實驗後,也許你會想要刪掉這個證書,可使用這個命令:

keytool -delete -alias cas -keystore  C:/Java/jdk1.8.0_91/jre/lib/security/cacerts

 

 

接下來就是跑官網的示例了

官網例子地址:

https://github.com/cas-projects/cas-sample-java-webapp

咱們先把它下下來,結構以下

能夠看到裏面內置了jetty,不過我是經過idea中的Tomcat運行的,我把它導入了idea。

 

而後就是咱們的正題了,配置修改:

一、pom.xml

在pom裏面加上如下內容:

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
        </dependency>

 

二、web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <!--用來控制cas識別的session的保存,以及判斷是不是登出請求-->
    <filter>
        <filter-name>CAS Single Sign Out Filter</filter-name>
        <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
        <init-param>
            <param-name>casServerUrlPrefix</param-name>
            <!--這個地址要和keystore中的CN一致,端口無所謂,域名必須一致,前邊我在hosts裏面配置了這個域名映射,因此實際上訪問的是127.0.0.1-->
            <param-value>https://cas.example.org:8443</param-value>
        </init-param>
    </filter>

    <listener>
        <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
    </listener>

    <!--用來跳轉登陸-->
    <filter>
        <filter-name>CAS Authentication Filter</filter-name>
        <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
        <init-param>
            <param-name>casServerLoginUrl</param-name>
            <!--這個地址要和keystore中的CN一致,端口無所謂,域名必須一致,前邊我在hosts裏面配置了這個域名映射,因此實際上訪問的是127.0.0.1-->
            <param-value>https://cas.example.org:8443/login</param-value>
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <!--這是你客戶端的部署地址,認證時會帶着這個地址,認證成功後會跳轉到這個地址-->
            <param-value>http://localhost:8080</param-value>
        </init-param>
    </filter>

    <!--用來驗證ticket-->
    <filter>
        <filter-name>CAS Validation Filter</filter-name>
        <filter-class>org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter</filter-class>
        <init-param>
            <param-name>casServerUrlPrefix</param-name>
            <!--這個地址要和keystore中的CN一致,端口無所謂,域名必須一致,前邊我在hosts裏面配置了這個域名映射,因此實際上訪問的是127.0.0.1-->
            <param-value>https://cas.example.org:8443</param-value>
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <!--這是你客戶端的部署地址,驗證ticket成功後會跳轉到這個地址-->
            <param-value>http://localhost:8080</param-value>
        </init-param>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>redirectAfterValidation</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>useSession</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>authn_method</param-name>
            <param-value>mfa-duo</param-value>
        </init-param>
    </filter>

    <!--用來封裝request-->
    <filter>
        <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
        <filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>CAS Single Sign Out Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>CAS Validation Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>CAS Authentication Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <welcome-file-list>
        <welcome-file>
            index.jsp
        </welcome-file>
    </welcome-file-list>
</web-app>

 

總共四個過濾器和一個監聽器,大部分都在文件內容中註釋說明了,本身看一下吧。

 

客戶端應用跑起來,會先跳轉到CAS服務器登陸頁,登陸成功後會跳轉到首頁index.jsp,裏面就是獲取了全部你能夠從CAS服務器獲取的屬性,若是你前面沒有配置多屬性獲取,那麼只有一個默認的id,和一些其餘cas自帶的屬性。

 

關於如何在代碼裏得到這些屬性,這個index.jsp 的代碼裏已經寫的很是清楚了,本身去看一下便可。

 

最後建議你們作完這些以後本身打開谷歌瀏覽器的F12,勾選上Preserve log

 

經過正常的登錄來看一下頁面跳轉流程,結合下邊這個地址,弄明白TGC、TGT、ST三個概念:

http://www.cnblogs.com/flying607/p/5626088.html

相關文章
相關標籤/搜索