mashiguang

          小馬快跑

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            20 隨筆 :: 0 文章 :: 60 評(píng)論 :: 0 Trackbacks
           

          使用cassso helloword

          因?yàn)楣ぷ餍枰佑|到sso,據(jù)知目前多數(shù)sso使用耶魯?shù)?/span>cas實(shí)現(xiàn),且發(fā)現(xiàn)使用cas真的是很簡單就可以做出一個(gè)單點(diǎn)登錄系統(tǒng)來,cas還提供豐富的擴(kuò)展功能,對(duì)于擴(kuò)展功能日后再細(xì)細(xì)研究,這里只使用cas做一個(gè)hello world來記錄本人的學(xué)習(xí)過程,如有幸被高人看到,還望指出弊病,不吝賜教。

          在使用cas之前最好對(duì)數(shù)字證書有所了解,不了解也沒有關(guān)系,跟著我的步驟也一樣可以跑的通。

          準(zhǔn)備工作

          需要的文件:

          ü         Jdk6

          ü         Tomcat

          ü         cas-server-3.3.2

          ü         cas-client-3.1.9

          證書

          下面是keytool命令的一些常用方法,先在這里認(rèn)識(shí)一下它們,一會(huì)兒會(huì)用的到。

          使用keytool命令生成密鑰庫

          keytool -genkey -alias tomcat -keyalg RSA -dname "CN=pcma, OU=vanceinfo, O=vanceinfo, L=haidian, S=beijing, C=CN" -keystore c:"keystore5.jks

          CN:主機(jī)名

          OU:組織單位

          O:組織

          L:地區(qū)

          S:城市

          C:國家

          如果需要指定密鑰有效期,添加-validity 365即可,單位是天,如:
          keytool -genkey -alias tomcat -keyalg RSA -dname "xxxxx" -keystore xxxxx -validity 365

          導(dǎo)出證書

          keytool -export -file c:/server5.crt -alias tomcat -keystore c:"keystore5.jks

          將證書導(dǎo)入到客戶端jdk

          keytool -import -keystore "D:"Java"jdk1.6.0_14"jre"lib"security"cacerts" -file c:/server5.crt -alias tomcat

          從密鑰庫中刪除指定別名的證書

          keytool -delete -noprompt -alias tomcat -keystore E:"apache-tomcat-6.0.20_2"conf"keystore2.jks

          查看密鑰庫中的證書

          keytool -list -v -keystore c:"keystore5.jks

          配置tomcat

          使用keytool命令生成密鑰庫。

          配置%tomcat_home%/conf/server.xml使tomcat支持SSL協(xié)議,并指定密鑰庫。

          <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

                         maxThreads="150" scheme="https" secure="true"

                         clientAuth="false" sslProtocol="TLS" keystorePass="mashiguang"

                                  keystoreFile="${catalina.home}/conf/keystore5.jks"/>

          部署cas server

          解壓縮cas-server-3.3.2-release.zip文件,在modules目錄里找到cas-server-webapp-3.3.2.war文件,這就是一個(gè)做好了的cas服務(wù)端,我們做的sso helloword可以直接使用,只需把cas-server-webapp-3.3.2.war改了個(gè)簡單點(diǎn)的名字,如cas.war,然后部署到tomcat即可。

          瀏覽器訪問https://pcma:8443/cas,如果打開顯示的是cas默認(rèn)的登錄頁面,則表示服務(wù)端已部署完畢。

          客戶端使用cas client

          新建兩個(gè)web工程,用于模擬單點(diǎn)登錄系統(tǒng)中的客戶端,并將cas-client-3.1.9"modules里的jar包放到web工程lib目錄下,是主要的是cas-client-core-3.1.9.jar文件,把spring2.5也放到lib目錄下。

          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">

                 <context-param> 

                  <param-name>contextConfigLocation</param-name> 

                  <param-value> 

                      /WEB-INF/config/casContext.xml  

                  </param-value> 

              </context-param> 

              <listener> 

                  <listener-class> 

                      org.springframework.web.context.ContextLoaderListener  

                  </listener-class> 

              </listener> 

              <!-- 負(fù)責(zé)用戶認(rèn)證 --> 

              <filter> 

                  <filter-name>CAS Authentication Filter</filter-name> 

                  <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class> 

                  <!-- CAS login 服務(wù)地址--> 

                  <init-param> 

                      <param-name>casServerLoginUrl</param-name> 

                      <param-value>https://pcma:8443/cas/login</param-value> 

                  </init-param> 

                  <init-param> 

                      <param-name>renew</param-name> 

                      <param-value>false</param-value> 

                  </init-param> 

                  <init-param> 

                      <param-name>gateway</param-name> 

                      <param-value>false</param-value> 

                  </init-param> 

                  <!-- 客戶端應(yīng)用服務(wù)地址--> 

                  <init-param> 

                      <param-name>serverName</param-name> 

                      <param-value>http://pcma:8081</param-value> 

                  </init-param> 

              </filter> 

              <!--負(fù)責(zé)Ticket校驗(yàn)--> 

              <filter> 

                  <filter-name>CAS Validation Filter</filter-name> 

                  <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 

                  <init-param> 

                      <param-name>targetBeanName</param-name> 

                      <param-value>cas.validationfilter</param-value> 

                  </init-param> 

              </filter> 

              <filter-mapping> 

                  <filter-name>CAS Authentication Filter</filter-name> 

                  <url-pattern>/*</url-pattern> 

              </filter-mapping> 

              <filter-mapping> 

                  <filter-name>CAS Validation Filter</filter-name> 

                  <url-pattern>/*</url-pattern> 

              </filter-mapping> 

          </web-app>

          casContext.xml文件

          <?xml version="1.0" encoding="UTF-8"?>

          <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

                        "http://www.springframework.org/dtd/spring-beans.dtd">

          <beans>

          <bean id="cas.validationfilter" class="org.jasig.cas.client.validation.Cas10TicketValidationFilter"> 

                  <property name="ticketValidator"> 

                      <ref bean="cas10TicketValidator"/> 

                  </property> 

                  <property name="useSession"> 

                      <value>true</value> 

                  </property> 

                  <!-- 客戶端應(yīng)用服務(wù)地址--> 

                  <property name="serverName"> 

                      <value>http://pcma:8081</value> 

                  </property> 

                  <property name="redirectAfterValidation"> 

                      <value>true</value> 

                  </property> 

              </bean> 

              <bean id="cas10TicketValidator" class="org.jasig.cas.client.validation.Cas10TicketValidator"> 

              <!-- 這里參數(shù)是cas服務(wù)器的地址--> 

                  <constructor-arg index="0" value="https://pcma:8443/cas" /> 

              </bean> 

          </beans> 

          新建index.jsp文件

           <body>

             hello sso<br>

             <a >sso2</a>這個(gè)地址是另外一臺(tái)機(jī)器上的sso客戶端

           </body>

          上面的web.xmlcasContext.xmlindex.jsp是兩個(gè)客戶端中的一個(gè),另一個(gè)要根據(jù)實(shí)際情況修改。

          最后不要忘記客戶端的jdk要使用keytool命令導(dǎo)入證書文件。

          測(cè)試

          啟動(dòng)tomcat,測(cè)試器訪問http://pcma:8081/sso,出現(xiàn)cas登錄頁面,輸入相同的用戶名和密碼即可登錄,登錄成功后頁面自動(dòng)跳轉(zhuǎn)回http://pcma:8081/sso,這時(shí)點(diǎn)擊頁面上的sso2鏈接,就可以自動(dòng)登錄并跳轉(zhuǎn)到sso2應(yīng)用。

          如果輸入用戶名密碼后提示下面的異常,是因?yàn)椴渴鹂蛻舳说?/span>jdk沒有導(dǎo)入證書文件的原因。

          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


          源碼

          http://www.aygfsteel.com/Files/mashiguang/sso.zip

          posted on 2009-12-07 09:50 mashiguang 閱讀(1870) 評(píng)論(4)  編輯  收藏 所屬分類: java web開發(fā)

          評(píng)論

          # re: hello cas 2009-12-07 13:02 20G高壓鍋爐管
          搶個(gè)沙發(fā)  回復(fù)  更多評(píng)論
            

          # re: hello cas 2009-12-08 10:50 凡客誠品
          踩踩!!!!!  回復(fù)  更多評(píng)論
            

          # re: hello cas 2009-12-08 20:27 smildlzj
          以前用過一下...感覺用著不是很爽...

          其實(shí)原理差不多....但是不知道為什么好像那么不爽....
          原理都是.

          unlogin->redirect sso server->redirect key to client->client get data from sso server

          模擬以上原理...自己弄了一個(gè)企業(yè)內(nèi)部的通行證系統(tǒng),sso的用戶綁定各子系統(tǒng)賬號(hào)id.(不允許用戶自己注冊(cè)的,所以我自己手工綁定,而且垮幾個(gè)應(yīng)用的,絕對(duì)不是最基層的員工)

          我倒希望哪位大大給我說下.cas有什么過人之處.

            回復(fù)  更多評(píng)論
            

          # re: hello cas 2009-12-11 13:33 BeanSoft
          收藏了 有時(shí)間看看 感謝樓主!  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 深圳市| 满城县| 衢州市| 杂多县| 太和县| 桓仁| 栖霞市| 嘉荫县| 南川市| 宝坻区| 阳城县| 增城市| 社旗县| 静宁县| 沙田区| 襄垣县| 新巴尔虎右旗| 潮州市| 东方市| 汝阳县| 都昌县| 正定县| 陇川县| 潮州市| 叶城县| 江达县| 海宁市| 太仓市| 宝兴县| 淳安县| 水城县| 洪洞县| 文山县| 秦皇岛市| 宝兴县| 德令哈市| 克东县| 彭山县| 砚山县| 民丰县| 夏津县|