【SSO單點系列】(1):CAS4.0 環境的搭建


1、概述

   今天開始寫CAS相關的第一篇文章,這篇文章主要是關於CAS環境的搭配,提供給剛剛接觸CAS的一個入門指南,並演示一個CAS的最簡單的實例html

 

2、環境要求

博主的環境以下:java

  1. win8.1 64 bitJDK1.7  下載地址點我Tomcat-8.0.15  下載地址點我cas-server-4.0.0 、cas-client-3.3.3  下載地址點我  (官網速度比較慢,提供百度網盤)

tomcat服務器須要部署三個,我分別命名爲 apache-tomcat-8.0.15-app一、apache-tomcat-8.0.15-app二、apache-tomcat-8.0.15-casweb

分別的用途以下:
序號
服務器名稱
用途
1
tomcat-app1
客戶端服務器1:用戶部署應用app1
2
tomcat-app2
客戶端服務器2:用戶部署應用app2
3
tomcat-cas
cas服務器:用來部署CAS server

 

 3、特別說明

  CAS 默認認證方式使用的是HTTPS協議,通常對安全性不高的話建議取消改爲HTTP方式。由於,開啓的話會常常提示證書過時、須要用戶確認等,對客戶的感知很差,當前有須要的能夠開啓。spring

 若是須要HTTPS協議的話,有關證書的生成能夠參考這篇文章 : CAS單點登陸證書導入 數據庫

 取消HTTPS協議的方法,第四點會具體介紹,你們能夠接着往下看!apache

 

4、實例講解

第一步、Tomcat修改

  1. 解壓下載的 Tomcat-8.0.15.zip,並按照第二點的約定複製三個並命名

修改tomcat的相關啓動等端口,使機器能夠運行多個tomcat。個人訪問端口對應以下:tomcat

序號 服務器名稱 訪問端口
1 tomcat-app1 8081
2 tomcat-app2 8082
3 tomcat-cas 18080

端口的修改方法:打開 x:\tomcat-app1\conf\server.xml 文件, 找到安全

複製代碼
 
   
第一個:修改Shutdown端口(默認爲8005端口)
<
Server port="8005" shutdown="SHUTDOWN">
第二個: 修改http訪問端口(默認爲8080端口)
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

第三個:修改8009端口
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

      修改爲本身須要的端口便可。服務器

        

第二步、CAS-SERVER 服務端的部署

    1. 解壓下載的 cas-server-4.0.0-release.zip 壓縮包找到 X:\cas-server-4.0.0\modules\cas-server-webapp-4.0.0.war 文件解壓到 tomcat-cas\webapps\ 下取消HTTPS協議:

       1)打開 cas-server\WEB-INF\deployerConfigContext.xml 文件 ,找到以下配置:cookie

 

<!-- Required for proxy ticket mechanism. -->
    <bean id="proxyAuthenticationHandler" 
class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient" /> 增長參數p:requireSecure="false",是否須要安全驗證,即HTTPS,false爲不採用。修改後爲: <bean id="proxyAuthenticationHandler"
class
="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient" p:requireSecure="false" />

 

     2)打開 cas-server\WEB-INF\spring-configuration\ticketGrantingTicketCookieGenerator.xml ,找到以下配置:

 

<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
        p:cookieSecure="true"
        p:cookieMaxAge="-1"
        p:cookieName="CASTGC"
        p:cookiePath="/cas" />

修改  p:cookieSecure="true" 爲 p:cookieSecure="false"
即不開啓https驗證

 

    3) 打開 cas-server\WEB-INF\spring-configuration\warnCookieGenerator.xml ,找到以下配置:

 

<bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
        p:cookieSecure="true"
        p:cookieMaxAge="-1"
        p:cookieName="CASPRIVACY"
        p:cookiePath="/cas" />
修改  p:cookieSecure="true" 爲 p:cookieSecure="false"
即不開啓https驗證

 

 

 

5.啓動 tomcat-cas ,訪問  http://localhost:18080/cas-server ,能夠看到以下界面

  

      

  注意:cas-server4.0以前的默認驗證規則:只要用戶名和密碼相同就認證經過

  4.0 以後規則改了,默認是配置在 deployerConfigContext.xml 配置文件中,能夠看到用戶名密碼爲 casuser/Mellon。

      

<bean id="primaryAuthenticationHandler"
          class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">
        <property name="users">
            <map>
                <entry key="casuser" value="Mellon"/>
            </map>
        </property>
    </bean>

 

 

 第三步、客戶端(cas-client)的配置

注:咱們直接用tomcat自帶的examples工程做爲客戶端例子

  1. 解壓咱們下載的cas-client-3.3.3-release.zip 包,複製cas-client-3.3.3\modules\cas-client-core-3.3.3.jar 包放到 tomcat-app1\webapps\examples\WEB-INF\lib 下(兩個client tomcat都須要放,這邊只列出其中一個)修改examples\WEB-INF\web.xml 文件,增長下面的內容:

 

 

<!-- ========================單點登陸開始 ======================== -->
    <!--用於單點退出,該過濾器用於實現單點登出功能,可選配置 -->
    <listener>
        <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
    </listener>
    <!--該過濾器用於實現單點登出功能,可選配置。 -->
    <filter>
        <filter-name>CASSingle Sign OutFilter</filter-name>
        <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CASSingle Sign OutFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter>
        <filter-name>CASFilter</filter-name>
        <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
        <init-param>
            <param-name>casServerLoginUrl</param-name>
            <param-value>http://localhost:18080/cas-server/login</param-value>
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <param-value>http://localhost:8081</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CASFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!--該過濾器負責對Ticket的校驗工做,必須啓用它 -->
    <filter>
        <filter-name>CASValidationFilter</filter-name>
        <filter-class>
            org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter
        </filter-class>
        <init-param>
            <param-name>casServerUrlPrefix</param-name>
            <param-value>http://localhost:18080/cas-server</param-value>
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <param-value>http://localhost:8081</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CASValidationFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- 該過濾器負責實現HttpServletRequest請求的包裹, 好比容許開發者經過HttpServletRequest的getRemoteUser()方法得到SSO登陸用戶的登陸名,可選配置。 -->
    <filter>
        <filter-name>CASHttpServletRequest WrapperFilter</filter-name>
        <filter-class>
            org.jasig.cas.client.util.HttpServletRequestWrapperFilter
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CASHttpServletRequest WrapperFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- 該過濾器使得開發者能夠經過org.jasig.cas.client.util.AssertionHolder來獲取用戶的登陸名。 好比AssertionHolder.getAssertion().getPrincipal().getName()。 -->
    <filter>
        <filter-name>CASAssertion Thread LocalFilter</filter-name>
        <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CASAssertion Thread LocalFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- ========================單點登陸結束 ======================== -->

 

 4.啓動 tomcat-app1 ,而後訪問 http://localhost:8081/examples ,頁面會跳到

http://localhost:18080/cas-server/login?service=http%3A%2F%2Flocalhost%3A8081%2Fexamples%2F

說明單點成功

 

 

一樣的  tomcat-app2 我這邊就不演示了,

我把修改完的兩個web.xml 上傳上來 

tomcat-app1 : web.xml

tomcat-app2 : web.xml

 

 第四步、 單點流程演示

咱們首先依次把三個tomcat都啓動後 ,咱們先單獨訪問兩個客戶端看看效果

1. 訪問 http://localhost:8081/examples  ==》 跳到 http://localhost:18080/cas-server/login?service=http%3A%2F%2Flocalhost%3A8081%2Fexamples%2F

2. 訪問 http://localhost:8082/examples  ==》 跳到  http://localhost:18080/cas-server/login?service=http%3A%2F%2Flocalhost%3A8082%2Fexamples%2F

說明兩個客戶端第一次訪問時都須要跳轉到cas-server進行認證

 

接下來:咱們登陸其中一個客戶端 http://localhost:8081/examples ,帳號密碼  casuser/Mellon

登陸成功後 顯示下面的界面

 

而後咱們在打開一個新選項卡 ,直接訪問 http://localhost:8082/examples

能夠看到 不會跳轉到cas-server登陸界面 直接顯示下面的界面

 

說明 兩個客戶端單點登陸成功,登陸了其中一個,另外一個不須要登錄便可進行訪問。

 

 

總結、

  單點登陸(Single Sign On , 簡稱 SSO )是目前比較流行的服務於企業業務整合的解決方案之一, SSO 使得在多個應用系統中,用戶只須要登陸一次就能夠訪問全部相互信任的應用系統。 

上文只是介紹了最簡單的單點登陸例子,在實際開發中是不能使用的。若是須要應用到項目中,還須要許多個性化的訂製,好比登錄頁的美化、經過數據庫認證、服務端與客戶端用戶信息的交互等。這些都會在後面的文章中介紹到。

 

好了,第一篇大概就這樣了, 沒有什麼代碼,就不上傳源碼了,你們湊合的看吧!

下一篇會介紹 【登陸頁的個性化定製】。

 

打完收工。。。

!

!

 

posted @ 2014-12-17 23:20 _輝 閱讀(2022) 評論(13) 編輯 收藏
相關文章
相關標籤/搜索