速動畫教程第二十九集 單點登錄CAS的使用方法

          Posted on 2007-04-02 01:36 oksonic 閱讀(10633) 評論(13)  編輯  收藏 所屬分類: java
           

          速動畫教程第二十九集

          單點登錄CAS的使用方法


            下載地址: http://www.oksonic.cn

          一.環境

          a)         Windows 2003 sp1

          b)        JDK1.5.0_11

          c)        Tomcat 5.5.23

          d)        MySql5.0

          二.準備

          a)         cas-server-3.0.6.zip 下載地址:http://www.ja-sig.org/products/cas/index.html

          b)        cas-client-java-2.1.1.zip 下載地址:同上

          c)        安裝完jdkjre后,需要配置JAVA_HOMEPATH=%JAVA_HOME%\bin

          三.步驟

          a)        配置Tomcat使用SSL安全認證

                                   i.              使用命令提示符進入到Tomcat安裝目錄

                                 ii.              生成服務端密匙執行以下命令

                               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

          運行后出現提示信息:

          輸入keystore密碼:changeit      這里也填入主機名

          您的名字與姓氏是什么?

           [Unknown] localhost           這里一定要填寫正確的主機名

          您的組織單位名稱是什么?

           [Unknown] oksonic

          您的組織名稱是什么?

           [Unknown] oksonic

          您所在的城市或區域名稱是什么?

           [Unknown] kunming

          您所在的州或省份名稱是什么?

           [Unknown] yunnan

          該單位的兩字母國家代碼是什么

           [Unknown] cn

          CN=localhost, OU=oksonic, O=oksonic, L=kunming, ST=yunnan, C=cn 正確嗎?

           [] y

          完成后會在Tomcat目錄生成一個名為casserver的文件

                                iii.              生成服務端證書執行以下命令

                                      keytool -export -alias casserver -storepass changeit -file server.cer                                     -keystore server.keystore

                                      命令執行后生成一個server.cer的證書文件

           

                               iv.              生成客戶端密匙執行以下命令

                                      keytool -genkey -alias casclient -keyalg RSA -keypass changeit -storepass                                  changeit -keystore client.keystore

                                 v.              生成客戶端證書執行以下命令

                                      keytool -export -alias casclient -storepass changeit -file client.cer                                        -keystore client.keystore

                                      命令執行后生成一個server.cer的證書文件

                               vi.              導入證書文件到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目錄下

           

                              vii.              拷貝cas-server-3.0.6.zip包內的target目錄下的cas.war文件到Tomcat目錄下的webapps目錄下

                            viii.              修改Tomcat的配置文件server.xml把以下補注釋的內容打開

          <Connector port="8443" maxHttpHeaderSize="8192"

                         maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

                         enableLookups="false" disableUploadTimeout="true"

                         acceptCount="100" scheme="https" secure="true"

                         clientAuth="false" sslProtocol="TLS" />

          加入紅字部份后的內容如下:

                   <Connector port="8443" maxHttpHeaderSize="8192"

          keystorePass="changeit" keystoreFile="/server.keystore"

                         maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

                         enableLookups="false" disableUploadTimeout="true"

                         acceptCount="100" scheme="https" secure="true"

                         clientAuth="false" sslProtocol="TLS" />

           

          b)        配置客戶端應用

                                   i.              使用Tomcat的例子jsp-examples來做客戶端

                                 ii.              打開項目中的web.xml文件,加入以下配置信息

                               <filter>
                                       <filter-name>CASFilter</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/proxyValidate
                                      </param-value>
                               </init-param>
                               <init-param>
                                      <param-name>
                                              edu.yale.its.tp.cas.client.filter.serverName
                                      </param-name>
                                             <param-value>
          localhost:8080</param-value>
                                </init-param>
                        </filter>

                        <filter-mapping>
                        <filter-name>CASFilter</filter-name>
                               <url-pattern>
          / *</url-pattern>
                         </filter-mapping>

           

                        拷貝cas-client-java-2.1.1.zip包中的casclient.jar到項目的lib目錄下

           

                        現在可以啟動Tomcat來測試一下是否能夠進入到登錄頁

          c)         配置CAS使用數據庫進行驗證

                                   i.              MySql中的Test庫中新建app_user

                 CREATE TABLE `app_user` (
                            `username` varchar(30) NOT NULL default '',
                            `password` varchar(45) NOT NULL default '',
                            PRIMARY KEY  (`username`)
                   ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
          添加以下用戶:
                   INSERT INTO `app_user` (`username`,`password`) VALUES

                              ('oksonic','oksonic'),

                              ('oksonic1','oksonic1');

           

                                ii.              修改cas項目中的deployerConfigContext.xml文件

          <bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
          注釋掉該行,在其下加入:
          <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
                                      <property name="sql" value="select password from
          app_user where username=?" />
                                      <property name="dataSource" ref="dataSource" />

                               </bean>
          并添加一個bean
              <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">
                 <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
                 <property name="url"><value>jdbc:mysql://localhost:3306/test</value></property>
                 <property name="username"><value>test</value></property>
                 <property name="password"><value>test</value></property>
              </bean>
          拷貝cas-server-jdbc-3.0.6.jarmysql-connector-java-3.1.11-bin.jarwebapps/cas/WEB-INF/lib下。

          Feedback

          # re: 速動畫教程第二十九集 單點登錄CAS的使用方法  回復  更多評論   

          2007-04-02 13:30 by wuxj888java
          我前一陣子也使用了cas作為單點登陸實現方式,但我的用戶登陸密碼是用MD5加密,我想在cas驗證的時候能有MD5進行解密比較密碼,也就是你上面的
          <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
          <property name="sql" value="select password from app_user where username=?" />
          <property name="dataSource" ref="dataSource" />
          </bean>
          我想其中password取出怎么進行解密?

          # re: 速動畫教程第二十九集 單點登錄CAS的使用方法[未登錄]  回復  更多評論   

          2007-04-02 15:20 by oksonic
          MD5現在沒有解密方法.

          # re: 速動畫教程第二十九集 單點登錄CAS的使用方法  回復  更多評論   

          2007-04-02 17:11 by wuxj888java
          我說的不清楚,我的意思是我的password是加密的,我怎么用明文在cas中與它進行校驗?

          # re: 速動畫教程第二十九集 單點登錄CAS的使用方法  回復  更多評論   

          2007-04-03 16:30 by asdfasdf
          @wuxj888java
          直接把明文再次加密就可以判斷啦,MD5現在是沒有解密 方法的

          # re: 速動畫教程第二十九集 單點登錄CAS的使用方法[未登錄]  回復  更多評論   

          2007-04-12 11:31 by alpha
          HTTP Status 500 -

          --------------------------------------------------------------------------------

          type Exception report

          message

          description The server encountered an internal error () that prevented it from fulfilling this request.

          exception

          javax.servlet.ServletException: Unable to validate ProxyTicketValidator [[edu.yale.its.tp.cas.client.ProxyTicketValidator proxyList=[null] [edu.yale.its.tp.cas.client.ServiceTicketValidator casValidateUrl=[https://localhost:8443/cas/proxyValidate">https://localhost:8443/cas/proxyValidate] ticket=[ST-5-T2Xm7ANbGlIGxSSKPTyNRD1iTXUjZ1ApaDY-20] service=[http%3A%2F%2Flocalhost%3A8888%2Fjsp-examples%2F] errorCode=[INVALID_SERVICE] errorMessage=[ticket 'ST-5-T2Xm7ANbGlIGxSSKPTyNRD1iTXUjZ1ApaDY-20' does not match supplied service] renew=false entireResponse=[<cas:serviceResponse xmlns:cas=' <cas:authenticationFailure code='INVALID_SERVICE'>
          ticket 'ST-5-T2Xm7ANbGlIGxSSKPTyNRD1iTXUjZ1ApaDY-20' does not match supplied service
          </cas:authenticationFailure>
          </cas:serviceResponse>
          ]]]]
          edu.yale.its.tp.cas.client.filter.CASFilter.doFilter(CASFilter.java:381)


          root cause

          edu.yale.its.tp.cas.client.CASAuthenticationException: Unable to validate ProxyTicketValidator [[edu.yale.its.tp.cas.client.ProxyTicketValidator proxyList=[null] [edu.yale.its.tp.cas.client.ServiceTicketValidator casValidateUrl=[
          https://localhost:8443/cas/proxyValidate">https://localhost:8443/cas/proxyValidate] ticket=[ST-5-T2Xm7ANbGlIGxSSKPTyNRD1iTXUjZ1ApaDY-20] service=[http%3A%2F%2Flocalhost%3A8888%2Fjsp-examples%2F] errorCode=[INVALID_SERVICE] errorMessage=[ticket 'ST-5-T2Xm7ANbGlIGxSSKPTyNRD1iTXUjZ1ApaDY-20' does not match supplied service] renew=false entireResponse=[<cas:serviceResponse xmlns:cas=' <cas:authenticationFailure code='INVALID_SERVICE'>
          ticket 'ST-5-T2Xm7ANbGlIGxSSKPTyNRD1iTXUjZ1ApaDY-20' does not match supplied service
          </cas:authenticationFailure>
          </cas:serviceResponse>
          ]]]]
          edu.yale.its.tp.cas.client.CASReceipt.getReceipt(CASReceipt.java:62)
          edu.yale.its.tp.cas.client.filter.CASFilter.getAuthenticatedUser(CASFilter.java:455)
          edu.yale.its.tp.cas.client.filter.CASFilter.doFilter(CASFilter.java:378)


          note The full stack trace of the root cause is available in the Apache Tomcat/5.5.16 logs.


          --------------------------------------------------------------------------------


          我按你的步驟做有這樣的錯誤,請教是什么原因阿

          # re: 速動畫教程第二十九集 單點登錄CAS的使用方法[未登錄]  回復  更多評論   

          2007-04-12 11:34 by alpha
          就是在驗證后不能返回到正確的頁面,不知道什么地方做錯了

          # re: 速動畫教程第二十九集 單點登錄CAS的使用方法  回復  更多評論   

          2007-06-07 21:01 by bearhunter
          very good

          # re: 速動畫教程第二十九集 單點登錄CAS的使用方法  回復  更多評論   

          2007-07-05 10:44 by jjs
          重寫這個類就可以了
          org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler
          先將明碼md5加密再與數據庫比較

          # re: 速動畫教程第二十九集 單點登錄CAS的使用方法  回復  更多評論   

          2007-08-14 11:45 by 同聲翻譯公司
          您好,我們公司是一家中國境內的專業翻譯公司,從事各專業翻譯服務,包括筆譯、口譯、同聲傳譯和同聲傳譯設備租賃等。我們需要招聘兼職翻譯、同傳譯員和外籍英文校對人員,不知道是否有時間。

          希望有機會合作.
          郭先生

          北京華譯網翻譯公司
          中國專家翻譯網
          地址:北京海淀區太陽園17號樓405室(北三環西路大鐘寺東側)郵編:100098
          電話:010-82115891 82115892 傳真010-82130386
          上海:上海漕溪北路38號20G (東方商廈后面實業公寓南樓)
          電話:021-34240860 34240925 傳真:021-34240925

          同傳租賃 同聲傳譯翻譯公司 同聲傳譯設備租賃 同聲傳譯 同聲傳譯設備租賃 同傳租賃 北京同傳設備租賃 上海同聲傳譯設備租賃 同聲傳譯

          # re: 速動畫教程第二十九集 單點登錄CAS的使用方法  回復  更多評論   

          2007-08-26 20:46 by feticiste-galleria-foto@mbxogid11.cn
          http://www.giovani-leccatrici-di-sborra.ebxogid11.cn attraente gratuito http://www.maturi-uomini-scopano-giovani.ebxogid11.cn vecchie nudiste com http://www.fotomontaggi-star.qbxogid11.cn freddissimo perfetto fighetta

          # re: 速動畫教程第二十九集 單點登錄CAS的使用方法  回復  更多評論   

          2007-11-11 21:14 by feticiste-galleria-foto@mbxogid11.cn
          http://www.foto-fiche-bionde.wftzxu02.cn piedini sborrati http://www.grosse-fighe-gratis.wftzxu02.cn piedi e mature http://www.madri-che-scopano.kcdebc02.cn vibratori grandi

          # 怎么我成功登錄后,拋出如下錯誤呢?//re: 速動畫教程第二十九集 單點登錄CAS的使用方法[未登錄]  回復  更多評論   

          2008-03-10 14:41 by ken
          exception

          javax.servlet.ServletException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
          edu.yale.its.tp.cas.client.filter.CASFilter.getAuthenticatedUser(CASFilter.java:255)
          edu.yale.its.tp.cas.client.filter.CASFilter.doFilter(CASFilter.java:184)

          # 怎么我成功登錄后,拋出如下錯誤呢?//re: 速動畫教程第二十九集 單點登錄CAS的使用方法[未登錄]  回復  更多評論   

          2008-03-10 14:41 by ken
          javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
          com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
          com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(Unknown Source)
          com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
          com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
          com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(Unknown Source)
          com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(Unknown Source)
          com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Unknown Source)
          com.sun.net.ssl.internal.ssl.Handshaker.process_record(Unknown Source)
          com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
          com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
          com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
          com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
          sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
          sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
          sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
          sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
          edu.yale.its.tp.cas.util.SecureURL.retrieve(SecureURL.java:70)
          edu.yale.its.tp.cas.client.ServiceTicketValidator.validate(ServiceTicketValidator.java:212)
          edu.yale.its.tp.cas.client.filter.CASFilter.getAuthenticatedUser(CASFilter.java:219)
          edu.yale.its.tp.cas.client.filter.CASFilter.doFilter(CASFilter.java:184)


          root cause

          sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
          sun.security.validator.PKIXValidator.doBuild(Unknown Source)
          sun.security.validator.PKIXValidator.engineValidate(Unknown Source)
          sun.security.validator.Validator.validate(Unknown Source)
          com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
          com.sun.net.ssl.internal.ssl.JsseX509TrustManager.checkServerTrusted(Unknown Source)
          com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(Unknown Source)
          com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(Unknown Source)
          com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Unknown Source)
          com.sun.net.ssl.internal.ssl.Handshaker.process_record(Unknown Source)
          com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
          com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
          com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
          com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
          sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
          sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
          sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
          sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
          edu.yale.its.tp.cas.util.SecureURL.retrieve(SecureURL.java:70)
          edu.yale.its.tp.cas.client.ServiceTicketValidator.validate(ServiceTicketValidator.java:212)
          edu.yale.its.tp.cas.client.filter.CASFilter.getAuthenticatedUser(CASFilter.java:219)
          edu.yale.its.tp.cas.client.filter.CASFilter.doFilter(CASFilter.java:184)

          posts - 103, comments - 1104, trackbacks - 0, articles - 0

          Copyright © oksonic

          主站蜘蛛池模板: 甘洛县| 松江区| 惠安县| 平罗县| 富源县| 松桃| 永年县| 石家庄市| 广安市| 图木舒克市| 横山县| 西昌市| 青海省| 彭泽县| 凤山县| 剑河县| 琼中| 东城区| 高清| 洛南县| 丽江市| 改则县| 年辖:市辖区| 普宁市| 方城县| 义乌市| 循化| 遂平县| 灌南县| 陆良县| 康平县| 吴旗县| 昭通市| 和林格尔县| 伊宁市| 肇东市| 宝兴县| 酒泉市| 陈巴尔虎旗| 广宗县| 汤原县|