隨筆 - 37  文章 - 14  trackbacks - 0
          <2011年2月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272812345
          6789101112

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          相關鏈接

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          基于CAS+Tomcat配置SSO
          一、系統配置
          cas server3.1.1
          cas client 2.1.1
          tomcat5.5

          二. Tomcat 配置,啟用SSL
          a. 在要安裝CAS的機器上為Tomcat生成用于SSL通訊的密鑰:%JAVA_HOME%/bin/keytool -genkey -alias tomcat -keyalg RSA
          這時需要輸入密鑰密碼和其他參數(第一個參數CN必須設置為CAS機器名,本機使用localhost測試),會在系統用戶目錄中生成.keystore密鑰文件。

          b. 導出別名為tomcat的密鑰文件:%JAVA_HOME%/bin/keytool -export -file /path/server.crt -alias tomcat 這時需要輸入上一步設定的密碼,結果會在/path/目錄生成server.crt信任狀。

          c. 為客戶端的JVM導入密鑰::%JAVA_HOME%/bin/keytool -import -keystore $JAVA_HOME/jre/lib/security/cacerts -file /path/server.crt -alias tomcat 注意:輸入密碼時密碼為"changeit",這是默認密碼。

          d. 修改服務端Tomcat配置文件,啟用SSL如下:

              <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" 
                         maxThreads
          ="150" scheme="https" secure="true" 
                         clientAuth
          ="false" sslProtocol="TLS"
                         keystoreFile
          ="D:\JAVA\Tomcat5.5\tomcat.keystore"
                         keystorePass
          ="changeit" 
                         truststoreFile
          ="C:/Program Files/Java/jdk1.5.0_04/jre/lib/security/cacerts" />
          三、CAS Server安裝
          把cas-server-webapp-3.1.1.war copy到tomcat\webapps下重命名為cas;可能需要修改的cas.properties里的cas server name。
          https://localhost:8443/cas/longin
          默認的cas server的驗證是只要用戶名和密碼一樣就可以登陸。可以通過修改deployerConfigContext.xml里的authenticationHandlers為自己的驗證機制,如mysql驗證用戶,如下
                  <property name="authenticationHandlers">
                      
          <list>
                          
          <bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
                              p:httpClient-ref
          ="httpClient" />
                      
                              
          <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
                                      
          <property name="sql" value="select password from user where username=?" />
                                      
          <property name="dataSource" ref="dataSource" />
                     
          </bean>
                      
          </list>
                  
          </property>
          并增加一個mysql dataSource
                  <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/sso</value></property>
                          
          <property name="username"><value>root</value></property>
                          
          <property name="password"><value>****</value></property>
                  
          </bean>
          四、CAS CLIENT配置
          以servlet-example為例子
          在web.xml增加下面內容
          <!-- CAS Filters --> 
          <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>client:port</param-value><!--client:port就是需要CAS需要攔截的地址和端口,一般就是Client端的IP和port--> 
          </init-param> 
          </filter> 

          <filter-mapping> 
          <filter-name>CASFilter</filter-name> 
          <url-pattern>/servlet/*</url-pattern> 
          </filter-mapping> 
          其中edu.yale.its.tp.cas.client.filter.serverName的value為需要CAS需要攔截的地址和端口,一般就是Client端的IP/主機名和port
          當輸入http://localhost:8080/servlet-exampls/servlet/HelloWorld就會要求跳轉到cas login窗口要求身份驗證。
          至此,SSO配置完成;但會出現下面問題
          1:假設有A、B兩個應用程式,現在在瀏覽器窗口1輸入對A應用程式的請求,會跳轉到cas login窗口身份驗證;身份驗證完成后跳轉會A應用程式請求頁面
          2:在窗口2輸入對B應用程式請求,還會需要身份驗證
          3:在窗口1修改URL為對B應用程式的請求,不需求身份驗證
          請看CAS SSO配置下文
          posted on 2007-11-19 11:27 扭曲的鉛筆 閱讀(9436) 評論(5)  編輯  收藏 所屬分類: J2EE

          FeedBack:
          # re: CAS SSO配置(上) 2008-08-12 16:05 
          一個字“好”!!  回復  更多評論
            
          # re: CAS SSO配置(上)[未登錄] 2008-10-17 16:07 王鵬
          文章寫得很不錯,再接再勵!

            回復  更多評論
            
          # re: CAS SSO配置(上) 2009-03-13 09:19 guooo
          2:在窗口2輸入對B應用程式請求,還會需要身份驗證


          這不失去sso的意義了嘛  回復  更多評論
            
          # re: CAS SSO配置(上) 2011-02-17 10:15 陌生
          嚴重: Error configuring application listener of class org.jasig.cas.client.session.SingleSignOutHttpSessionListener
          怎么會報錯啊  回復  更多評論
            
          # re: CAS SSO配置(上) 2011-02-17 10:16 陌生
          java.lang.ClassNotFoundException: org.jasig.cas.client.session.SingleSignOutHttpSessionListener
          說類加載失敗,我是官方下載的cas-client-java-2.1.1  回復  更多評論
            
          主站蜘蛛池模板: 秀山| 丹江口市| 江孜县| 台中县| 赞皇县| 毕节市| 深州市| 井陉县| 疏勒县| 麦盖提县| 水富县| 沙湾县| 古蔺县| 新巴尔虎右旗| 秭归县| 富阳市| 彩票| 莱阳市| 连南| 崇仁县| 九龙城区| 马尔康县| 原平市| 丰都县| 张家川| 北票市| 绵阳市| 吴忠市| 定州市| 买车| 台东县| 遵化市| 石林| 元朗区| 特克斯县| 左贡县| 贺州市| 永州市| 白城市| 苗栗市| 紫金县|