CAS伺服器的搭建和Java項目整合

來源:互聯網
上載者:User

標籤:

最近項目需要,需要做一個單點登陸的功能,由於之前沒有接觸過SSO,不是很瞭解,查閱資料後 選擇使用CAS作為研究對象。CAS是有耶魯大學研發的單點登入伺服器。

借鑒了:http://blog.csdn.net/small_love/article/details/6664831的經驗,

1.開發環境

  •  tomcat7
  •  CAS Service 版本    cas-server-4.0.0
  •    CAS Client   版本    cas-client-3.3.3
  •    eclipse
  •    jdk1.7

2.開發步驟大致分為三部

  •   產生認證
  •   佈建服務端
  •   配置用戶端
  •   設定資料庫串連
  •   測試

3.產生認證

  認證對於實現此單點登入非常之重要,認證是伺服器端和用戶端安全通訊的憑證,本教程只是示範,所有用了 JDK內建的認證產生工具keytool。

  1. 產生認證

      

命令:keytool -genkey -alias  sslverisign -keyalg RSA -keystore D:/keys/smallkey

  其中sslverisign是產生認證的一個別名 自訂  D:/keys/smallkey 是產生的路徑 一定要確保產生的路徑是存在的,smallkey會自己建立。

  命令執行後如:

    

      其中名字與姓氏這一最好寫你的網域名稱,如果在單擊測試你可以在C:\Windows\System32\drivers\etc\hosts檔案中映射一個虛擬網域名稱。

      不要寫IP 其中紅字部分非常重要,在後面還會用到。

       配置本地虛擬網域名稱的方法為:C:\Windows\System32\drivers\etc\hosts 找到hosts檔案 開啟編輯輸入如下:

    

    配置的時候 該檔案有時候無法修改不能儲存,自個百度吧 有解決方案。

     2.匯出認證

  

C:\>keytool -export -file d:/keys/ssl.crt -alias sslverisign -keystore d:/keys/smallkey
ssl.crt 為產生認證的名字  sslverisign為第一步產生的認證別名 
執行後 如:

 

   密碼為第一步自己所設定的密碼

 3.把認證匯入到用戶端JDK中

命令:keytool -import -keystore C:\Java\jdk1.7.0_15\jre\lib\security\cacerts -file D:/keys/ssl.crt -alias sslverisign

    執行如下:

  

   匯入成功.

   該步驟容易出現的問題就是:

   1.keytool錯誤: java.io.IOException: Keystore was tampered with, or password was incorrect

   錯誤的解決方案是,把%JAVA_HOME%\lib\security下的cacerts檔案刪除掉,在執行 

   2. 還有就是jdk存放的位置路徑如果存在空格也會導致匯入認證不成功,提示非法(預設安裝jdk的時候如:C:\Program Files 存在空格 將會導致匯入不成功),需要注意。

 

4.佈建服務端

 1、 下載CAS的服務端cas-server-4.0.0-release.zip解壓,把解壓後的檔案中modules檔案夾中的cas-server-webapp-4.0.0.war檔案拷貝的D:\apache-tomcat7\webapps目錄下並改重新命名為cas.war :http://downloads.jasig.org/cas/
2、修改D:\apache-tomcat7\conf\server.xml檔案去掉此檔案83到93行之間的注釋,修改為:



keystoreFile="D:/keys/smallkey"  <!--產生認證的時候的路徑-->
keystorePass="smalllove"/>       <!--在產生認證的時候設定的密碼--> 
設定完成後手動啟動tomcat:D:\apache-tomcat7\bin\startup.bat  點擊該bat檔案運行。

 如果運行出現如下錯誤 導致啟動不成功。

   嚴重: Failed to initialize end point associated with ProtocolHandler ["http-apr-443"]
 java.lang.Exception: Connector attribute SSLCertificateFile must be defined when using SSL with APR

   需要修改D:\apache-tomcat7\conf\server.xml  找到如下注釋掉:

  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

3、以上配置完成訪問https://www.deng.com:8443/cas出現以下頁面



點擊繼續瀏覽此網頁,後出現



由於我們用的是cas4.0的版本 所以預設的初始帳號是密碼是 casuser Mellon 之前看很多教程用的是3.4的版本 那時候初始帳號和密碼是admin

輸入帳號密碼後 會出現如下介面 表示登陸成功 伺服器端配置完成。

  

5.配置用戶端
下載用戶端:http://downloads.jasig.org/cas-clients/,目前最新版本為:cas-client-3.3.3,然後解壓cas-client-3.1.12.zip,在modules檔案夾中有需要的jar包(cas-client-core-3.3.3.jar,jul-to-slf4j-1.6.1.jar,log4j-over-slf4j-1.6.1.jar,slf4j-api-1.7.1.jar).
由於自己要做測試測試兩個項目登陸後是否能實現單點,在單獨部署一個tomcat伺服器(加之前部署修改的一共兩個),如果是解壓包的tomcat,就把之前的tomcat複製一個出來,開啟D:\apache-tomcat-7.0.40\conf\server.xml檔案,修改他的連接埠號碼保證兩個tomcat啟動後不衝突。
第22行修改後 <Server port="8055" shutdown="SHUTDOWN">第70到74 修改後    <Connector port="18080" protocol="HTTP/1.1"               connectionTimeout="20000"               redirectPort="18443" />第97行 修改後 <Connector port="18009" protocol="AJP/1.3" redirectPort="18443" />
登陸建立兩個WEB工程 開啟web.xml檔案配置如下資訊,我cas伺服器用的預設的tomcat連接埠號碼,所以web項目我部署在後面修改連接埠後的tomcat上18080:
兩個web工程配置一樣 可以在預設的index.html頁面上標註一下區別。
 1 <!-- ======================== 單點登入開始 ======================== -->   2     <!-- 用於單點退出,該過濾器用於實現單點登出功能,可選配置 -->   3     <listener>   4         <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>   5     </listener>   6    7     <!-- 該過濾器用於實現單點登出功能,可選配置。 -->   8     <filter>   9         <filter-name>CAS Single Sign Out Filter</filter-name>  10         <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>  11     </filter>  12     <filter-mapping>  13         <filter-name>CAS Single Sign Out Filter</filter-name>  14         <url-pattern>/*</url-pattern>  15     </filter-mapping>  16   17     <!-- 該過濾器負責使用者的認證工作,必須啟用它 -->  18     <filter>19         <filter-name>CASFilter</filter-name>20         <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>21         <init-param>22             <param-name>casServerLoginUrl</param-name>23             <param-value>https://www.deng.com:8443/cas/login</param-value>24             <!--這裡的server是服務端的IP -->25         </init-param>26         <init-param>27             <param-name>serverName</param-name>  28             <param-value>http://www.deng.com:18080</param-value> 29         </init-param>                                        30     </filter>  31     <filter-mapping>  32         <filter-name>CASFilter</filter-name>33         <url-pattern>/*</url-pattern>34     </filter-mapping>35   36     <!-- 該過濾器負責對Ticket的校正工作,必須啟用它 -->37     <filter>  38         <filter-name>CAS Validation Filter</filter-name>  39         <filter-class>  40             org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>  41         <init-param>  42             <param-name>casServerUrlPrefix</param-name>  43             <param-value>https://www.deng.com:8443/cas</param-value>  44         </init-param>  45         <init-param> 46             <param-name>serverName</param-name>  47             <param-value>http://www.deng.com:18080</param-value>   48         </init-param>  49     </filter>50     <filter-mapping>  51         <filter-name>CAS Validation Filter</filter-name>  52         <url-pattern>/*</url-pattern>  53     </filter-mapping>  54   55     <!-- 該過濾器負責實現HttpServletRequest請求的包裹, 比如允許開發人員通過HttpServletRequest的getRemoteUser()方法獲得SSO登入使用者的登入名稱,可選配置。 -->  56     <filter>  57         <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>  58         <filter-class>  59             org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>  60     </filter>  61     <filter-mapping>  62         <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>  63         <url-pattern>/*</url-pattern>  64     </filter-mapping>  65   66     <!-- 該過濾器使得開發人員可以通過org.jasig.cas.client.util.AssertionHolder來擷取使用者的登入名稱。 比如AssertionHolder.getAssertion().getPrincipal().getName()。 -->  67     <filter>  68         <filter-name>CAS Assertion Thread Local Filter</filter-name>  69         <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>  70     </filter>  71     <filter-mapping> 72         <filter-name>CAS Assertion Thread Local Filter</filter-name>  73         <url-pattern>/*</url-pattern>  74     </filter-mapping>  75   76     <!-- ======================== 單點登入結束 ======================== -->

配置完成後手動啟動cas所屬的tomcat,確認沒有報錯後,在eclipse部署兩個web功能,然後eclipse裡啟動tomcat部署的兩個項目。

博主建了兩個簡單的功能 工程名為:

 

啟動完成後 網頁輸入項目任意一個項目的地址進行測試。

 

開啟後都自動跳轉到如下介面,開啟另外一個項目也是如此。



登陸測試帳號,驗證通過後,就會返回到該項目的index頁面。開啟另一個項目也會跳轉到對應的index頁面。不會被攔截登陸。至此說明配置單點登陸成功。

5.設定資料庫
目前使用的是預設帳號登陸的的情況,但是要是串連到資料庫又怎麼辦呢。下面cas伺服器如何設定資料庫。我使用的資料庫是mysql
1. 開啟cas伺服器所屬的tomcat 找到D:\apache-tomcat7\webapps\cas\WEB-INF\lib。加入幾個依賴包(cas-server-support-jdbc-4.0.0.jar,commons-dbcp-1.4.jar,commons-pool-1.6.jar,mysql-connector-java-5.0.8-bin.jar)
其中cas-server-support-jdbc-4.0.0.jar可以在cas-server-4.0.0\modules目錄下找到 其他的需要自行下載了。
2.開啟D:\apache-tomcat7\webapps\cas\WEB-INF\deployerConfigContext.xml,找到如下預設的帳號密碼 注釋掉。



然後新增:
 1 <bean id="primaryAuthenticationHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"> 2                 <property name="dataSource" ref="dataSource" /> 3                 <property name="sql" value="select password from ms_user where user_code=?" />
<!-- 上面這句寫自己資料庫sql -->
4 </bean>

5<!-- MySQL connector -->
 6 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 7 <property name="driverClassName"> 8 <value>com.mysql.jdbc.Driver</value> 9 </property>10 <property name="url">11 <value>jdbc:mysql://localhost:3306/test</value>12 </property>13 <property name="username">14 <value>資料庫帳號</value>15 </property>16 <property name="password">17 <value>資料庫密碼</value>18 </property>19 </bean>

修改完成後再重新啟動cas服務端的tomcat伺服器  cas登陸頁面就需要登陸自己資料庫的帳號才能登陸了。

 

CAS伺服器的搭建和Java項目整合

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.