CAS之單點登入及退出

來源:互聯網
上載者:User

    最近自己做的一個項目用了CAS的單點登入,弄了好幾天終於把登入與退出配置成功,下面記錄的是我的配置過程。

 

    CAS官網地址:http://www.jasig.org/cas

    CAS服務端:http://www.ja-sig.org/downloads/cas/

    CAS用戶端:http://www.ja-sig.org/downloads/cas-clients/

 

   準備工作

      1. 環境
:Windows XP
、JDK1.5
、Tomcat6.0

      2. 所需的包:commons-pool-1.5.4.jar

                         commons-dbcp-1.2.2.jar

                         commons-collections-3.2.jar

                         cas-server-support-jdbc-3.1.1.jar

                         資料庫驅動包

 

   配置SSL

   使用命令提示字元進入到Tomcat安裝目錄 :
   1. 產生服務端密匙,執行以下命令
         keytool -genkey -alias 別名keyalg RSA -keypass changeit -storepass changeit   -keystore server.keystore
       例:keytool -genkey -alias casserver -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore
       運行後出現提示資訊:
       您的名字與姓氏是什嗎?
       [Unknown]: localhost         // 這裡一定要填寫正確的主機名稱
       您的組織單位名稱是什嗎?
       [Unknown]: test
       您的組織名稱是什嗎?
       [Unknown]: test
       您所在的城市或地區名稱是什嗎?
       [Unknown]:beijing
       您所在的州或省份名稱是什嗎?
       [Unknown]:beijing
       該單位的兩字母國家代碼是什麼
       [Unknown]: cn
       CN=localhost, OU=oksonic, O=oksonic, L=kunming, ST=yunnan, C=cn 正確嗎? Y
       完成後會在Tomcat目錄產生一個名為server.keystore的檔案

   2. 產生服務端認證,執行以下命令
       keytool -export -alias casserver -storepass changeit -file server.cer  -keystore server.keystore
       命令執行後產生一個server.cer的認證檔案

   3. 產生用戶端密匙,執行以下命令
       keytool -genkey -alias casclient -keyalg RSA -keypass changeit -storepass changeit -keystore client.keystore

 

   4. 產生用戶端認證,執行以下命令
       keytool -export -alias casclient -storepass changeit -file client.cer  -keystore client.keystore
       命令執行後產生一個server.cer的認證檔案

   5. 匯入認證檔案到cacerts 檔案中,執行以下命令
       keytool -import -trustcacerts -alias server -file server.cer -keystore cacerts -storepass changeit
       keytool -import -trustcacerts -alias client -file client.cer -keystore   cacerts -storepass changeit
       把cacerts檔案,拷貝到$java_home/jre/lib/security目錄下

   6. 修改Tomcat的設定檔server.xml把以下補註釋的內容開啟並添加紅色部分
      <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               keystoreFile="/server.keystore" keystorePass="changeit"

               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />

 

   CAS部屬

   1.  將cas-server-3.3.5/modules/包內cas-server-webapp-3.3.5.war改名為cas.war並拷貝到Tomcat目錄下的webapps目錄下

   2.  啟動Tomcat,訪問https://localhost:8443/cas,如果能出現正常的 CAS 登入頁面,則說明 CAS
Server 已經部署成功

   3.  如果需要串連資料庫來登入還需要配置 deployerConfigContext.xml檔案

        將<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />

        注釋後添加:

       <bean id="SearchModeSearchDatabaseAuthenticationHandler"
                  class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler"
                  abstract="false" lazy-init="default"  autowire="default" dependency-check="default">
                  <property name="tableUsers">
                   <value>table_name</value>
                  </property>
                  <property name="fieldUser">
                   <value>username</value>
                  </property>
                  <property name="fieldPassword">
                   <value>password</value>
                  </property>
                  <property name="dataSource" ref="casDataSource" />
         </bean>

       然後設定資料庫,在外面添加一個bean ,內容如下:

       <bean id="casDataSource" class="org.apache.commons.dbcp.BasicDataSource">
           <property name="driverClassName">
                <value>oracle.jdbc.driver.OracleDriver</value>
           </property>
           <property name="url">
                 <value>jdbc:oracle:thin:@192.168.1.52:1521:dbname</value>
           </property>
           <property name="username">
                 <value>name</value>
           </property>
           <property name="password">
                 <value>password</value>
           </property>
       </bean>

 

 

   部屬用戶端應用

   1. 與CAS SERVER建立信任關係

       假設 CAS Server 單獨部署在一台機器 A,而用戶端應用部署在機器 B 上,由於用戶端應用與 CAS Server 的通訊採用 SSL,因此,需要在

       A 與 B 的 JRE 之間建立信任關係。首先與 A 機器一樣,要產生 B 機器上的認證,配置 Tomcat 的 SSL 協議。其次下載

       http://blogs.sun.com/andreas/entry/no_more_unable_to_find

的 InstallCert.java,運行“ java InstallCert compA:8443 ”命

       令,並且在接下來出現的詢問中輸入
1。這樣,就將 A 添加到了 B 的 trust store 中。如果多個用戶端應用分別部署在不同機器上,那麼每

       個機器都需要與 CAS
Server 所在機器建立信任關係

   2. 依賴包部屬

       a. 將在準備工作中下載的三個包放到 $Tomcat_Home/webapps/cas/WEB-INF/lib目錄下

       b. 將casclient-2.1.1.jar、cas-client-core-3.1.9.jar(用於單點退出)放到你的應用lib下,如 client_1/WEB-INF/lib目錄下

   3. web.xml配置

 

    <!--單點退出配置-->

     <filter>
        <filter-name>CAS Single Sign Out Filter</filter-name>
        <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
    </filter>   

    <!--單點登入配置--> 

    <filter-mapping>
        <filter-name>CAS Single Sign Out Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter>
        <filter-name>CAS Filter</filter-name>
        <filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
        <init-param>
          <param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
          <param-value>https://localhost:8443/cas/login</param-value>
        </init-param>
        <init-param>
          <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
          <param-value>https://localhost:8443/cas/serviceValidate</param-value>
        </init-param>
        <init-param>
          <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
          <param-value>localhost:8081</param-value>
        </init-param>   
    </filter>

    <!--退出要放在登入配置前--> 
    <filter-mapping>
      <filter-name>CAS Single Sign Out Filter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
   
    <filter-mapping>
      <filter-name>CAS Filter</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>
   
    <listener>
       <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
    </listener>

 

   4.  測試登入

     a. 登入client_1,輸入正確的使用者名稱密碼登入成功

     b. 在訪問client_2,不用再登入

 

   5.  測試退出

     a. 訪問https://localhost:8443/cas/logout就退出了

     b. 再訪問client_2或clinet_1需要登入

 

   注意:退出一定要用https, 用 http 是不行的。

 

  參考文獻:

  http://blog.csdn.net/DL88250/archive/2008/08/20/2799522.aspx

  http://ssh-2009-126-com.javaeye.com/blog/562111

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.