http://1185734295.iteye.com/blog/1997263html
JavaTomcatEclipseJDKSSO .
SSO,即Single sign on/off,單點登陸/退出。
CAS,全稱JA-SIG Central Authentication Service,實現SSO的開源項目。
說明
CAS的相關文檔在網上可謂鋪天蓋地,但是對於企圖搭架構起CAS服務的新手,每每會發現,介紹理論的文章沒有結合操做;介紹操做的文章又缺胳膊斷腿,並不能真正循序漸進的架構起一個完整的單點登陸/退出的服務。
本文就將以操做步驟爲主,儘量完整的講述一個cas的客戶端和服務端在tomcat下部署和配置的過程,至於理論知識,請讀者自行搜索,或者參考文章末尾的參考資料。
環境
Windows XP
JDK1.5
Tomcat6.0
準備1
安裝JDK,eclipse,tomcat
準備2
到CAS官方站點下載CAS的客戶端和服務器端
官方地址爲:http://www.ja-sig.org/products/cas/
下載頁面爲:http://www.ja-sig.org/products/cas/downloads/index.html
到下載頁面下載如下3個zip包:
第一個,CAS Server,這個是CAS的服務器端(當前最新版本是3.3.1)
第二個,JA-SIGCAS Java Client,這個是官方開發的CAS的客戶端,用於單點退出。特別注意事項:當前只有這個客戶端(JA-SIGCAS Java Client)的3.1.2及以上版本支持單點退出(當前最新版本是3.1.3)
第三個,Yale CAS Client,這個是耶魯大學開發的CAS的客戶端,用於單點登陸,不支持單點退出(當前最新版本是2.0.11)
下載後的ZIP包安放於c:\resource\cas目錄下,分別解壓於當前目錄。
準備工做結束,開始正式操做。
步驟1:製做密鑰
開始-運行-CMD
先測試一下,鍵入:(鍵入尖括號右面的代碼。尖括號不要鍵入,下同)
>keytool
若是沒有出現幫助說明,說明Path沒有配置,如何配置不會的本身baidu。
配置好了從新打開CMD窗口,轉到c:\resource\cas目錄下。
怎麼轉?好吧,不會的按照下面的代碼鍵入:
>c:
>cd\
>cd resource\cas
接下來開始生成密鑰,鍵入:
>keytool -genkey -alias tomcat -keystore ./mykeystore -keyalg RSA -validity 2000
password:changeit
Common Name/Your Name:localhost
剩下的隨便輸入
確認,輸入"yes",中文的話輸入"是"
最後,使用密碼相同,直接回車
操做成功的話,會在c:\resource\cas目錄下產生一個mykeystore的文件
繼續鍵入:
>keytool -export -alias tomcat -keystore ./mykeystore -file server.crt
Keystore password:changeit
操做成功的話,會在c:\resource\cas目錄下產生一個server.crt的文件
繼續鍵入:
>keytool -import -alias tomcat -file ./server.crt -keystore %JAVA_HOME%/jre/lib/security/cacerts
Keystore password:changeit
特別說明:這個%JAVA_HOME%是指tomcat須要使用的JDK,固然,若是按照本文後面的用eclipse裏配置的tomcat, 那%JAVA_HOME%就是eclipse中tomcat所配置的JDK,若是你配到其餘的jdk上,到後面實際訪問服務端的時候會出現異 常:unable to find valid certification path to requested target
tomcat所配置的JDK是哪一個?不知道?查看eclipse中tomcat所配置的JDK的方法:
Eclipse下菜單window-preperences-myEclipse-servers-tomcat-tomcat6-jdk- tomcat JDK name,這個tomcat JDK name對應的是window-preperences-java-installed JREs下的name屬性,其對應的location就是jdk的路徑了。
至此,步驟1完成。
步驟2:配置tomcat
打開%TOMCAT_HOME%/conf/server.xml,其中有這麼一段代碼
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
這段代碼當前狀態是被註釋掉的,將他打開,並完善成以下代碼:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="c:/resource/cas/mykeystore "
keystorePass="changeit"/>
注意事項:其中的keystoreFile="c:/resource/cas/mykeystore" ,配置上後此文件不可被刪除,否則tomcat會報錯:找不到此文件。
保存關閉文件,步驟2完成。
步驟3:配置CAS服務端
在c:\resource\cas\cas-server-3.3.1-release\cas-server-3.3.1\modules目錄 下,有個cas-server-webapp-3.3.1.war的war包,複製到%TOMCAT_HOME%/webapps目錄下,並改名爲 cas_server.war
由於咱們剛纔配置的是eclipse使用的JDK,因此如今經過eclipse啓動tomcat
訪問http://localhost:8080/cas_server,出現登陸頁面,說明部署成功。
嘗試下登陸,用戶名和密碼相同就能夠登陸成功。
步驟4:配置CAS客戶端
在eclipse中新建一個web工程,名字:cas_client1
將c:\resource\cas\cas-client-2.0.11\cas-client-2.0.11\java\lib\casclient.jar複製到工程cas_client1的lib下面(用於單點登陸)
將c:\resource\cas\cas-client-3.1.3-release\cas-client-3.1.3\modules目錄下的cas-client-core-3.1.3.jar複製到工程cas_client1的lib下面(用於單點退出)
將c:\resource\cas\cas-client-3.1.3-release\cas-client-3.1.3\modules目錄下的commons-logging-1.1.jar複製到工程cas_client1的lib下面(用於單點退出)
在工程cas_client1的web.xml中增長以下代碼:
<!-- 用於單點退出 -->
<listener>
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
</listener>
<filter>
<filter-name>CAS Single Sign Out Filter</filter-name>
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
<!-- 用於單點登陸 -->
<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_server/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_server/serviceValidate</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>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>
注意事項:web.xml中的filter要注意前後順序,CAS Single Sign Out Filter相關配置要放在原先配置的CAS Filter的前面(至少filter-mapping要在前面)
至此,步驟4完成。
測試:同時將cas_client1和cas_server發佈一下,訪問http://localhost:8080/cas_client1,將自動跳轉到服務端的登陸頁面,填寫相同的用戶名和密碼,則成功登陸並跳轉回客戶端的。
步驟5:單點登陸和退出
按照步驟4 的流程,再建立web工程,名字:cas_client2
同時部署server,client1,client2
測試1:訪問client1,登陸後能夠直接訪問client2
測試2:訪問client2,登陸後能夠直接訪問client1
測試3:登陸client1,退出後能夠不可訪問client1和client2
如何退出?訪問https://localhost:8443/cas_server/logout就退出了。
注意事項:訪問形如http:// localhost:8080/cas_server/logout,這種經過http方式訪問退出是不行的!!由於你不經過https來註銷,CAS Server怎麼"殺"掉它經過https發給你的TGC Cookie?
至此,步驟5完成,基本完成單點登陸和退出功能。java
http://michael-roshen.iteye.com/blog/1969665web
單點登陸(Single Sign On , 簡稱 SSO )是目前比較流行的服務於企業業務整合的解決方案之一, SSO 使得在多個應用系統中,用戶只須要登陸一次就能夠訪問全部相互信任的應用系統。CAS(Central Authentication Service)是一款不錯的針對 Web 應用的單點登陸框架瀏覽器
CAS 是 Yale 大學發起的一個開源項目,旨在爲 Web 應用系統提供一種可靠的單點登陸方法,CAS 在 2004 年 12 月正式成爲 JA-SIG 的一個項目。CAS 具備如下特色:tomcat
從結構上看,CAS 包含兩個部分: CAS Server 和 CAS Client。CAS Server 須要獨立部署,主要負責對用戶的認證工做;CAS Client 負責處理對客戶端受保護資源的訪問請求,須要登陸時,重定向到 CAS Server。圖1 是 CAS 最基本的協議過程:服務器
CAS Client 與受保護的客戶端應用部署在一塊兒,以 Filter 方式保護受保護的資源。對於訪問受保護資源的每一個 Web 請求,CAS Client 會分析該請求的 Http 請求中是否包含 Service Ticket,若是沒有,則說明當前用戶還沒有登陸,因而將請求重定向到指定好的 CAS Server 登陸地址,並傳遞 Service (也就是要訪問的目的資源地址),以便登陸成功事後轉回該地址。用戶在第 3 步中輸入認證信息,若是登陸成功,CAS Server 隨機產生一個至關長度、惟1、不可僞造的 Service Ticket,並緩存以待未來驗證,以後系統自動重定向到 Service 所在地址,併爲客戶端瀏覽器設置一個 Ticket Granted Cookie(TGC),CAS Client 在拿到 Service 和新產生的 Ticket 事後,在第 5,6 步中與 CAS Server 進行身份合適,以確保 Service Ticket 的合法性。架構
在該協議中,全部與 CAS 的交互均採用 SSL 協議,確保,ST 和 TGC 的安全性。協議工做過程當中會有 2 次重定向的過程,可是 CAS Client 與 CAS Server 之間進行 Ticket 驗證的過程對於用戶是透明的。