官網:http://jasig.github.io/cas/
Cas Server下載:http://developer.jasig.org/cas/
Cas Client下載:http://developer.jasig.org/cas-clients/
測試環境:
jdk:java version "1.8.0_60"
tomcat:apache-tomcat-7.0.65
CAS Server:cas-server-4.0.0-release.zip
CAS Client:cas-client-3.1.12-release.zip
首先安裝jdk、Tomcat ,這裏安裝不作介紹。
進入正題:
1、使用java keytool工具爲系統生成https證書,併爲系統註冊
一、生成證書文件
keytool -genkey -alias asq -keyalg RSA -keystore g:/keys/asqjava
二、導出證書文件
keytool -export -file g:/keys/asq.crt -alias asq -keystore g:/keys/asqgit
|
生成到指定目錄下的兩個文件github
|
三、將證書導入到客戶端JRE中(注意、是導入JRE中),若是security中已經存在cacerts,須要先將其刪除。
keytool -import -keystore "C:\Program Files\Java\jdk1.8.0_131\jre\lib\security\cacerts" -file g:/keys/asq.crt -alias asqweb
|
2、配置服務器端 (單獨放到一個Tomcat中 ,端口號8080,並進行以下配置)
一、從http://developer.jasig.org/cas/上下載cas服務器端cas-server-4.0.0-release.zip,在modules目錄下找到cas-server-webapp-4.0.0.war,
將其複製到%TOMCAT_HOME%\webapps下,並將名稱改成cas.warapache
|
二、修改%TOMCAT_HOME%\conf\server.xml文件,添加如下代碼
tomcat
<!--keystoreFile 生成的證書文件 keystorePass 祕鑰庫密碼 --> <Connector SSLEnabled="true" clientAuth="false" keystoreFile="F:/keys/castest" keystorePass="123456" maxThreads="150" port="8443" protocol="org.apache.coyote.http11.Http11Protocol" scheme="https" secure="true" sslProtocol="TLS"/> |
三、啓動Tomcat,測試:https://localhost:8443/ 服務器
|
若是能夠正常訪問,說明證書安裝成功session
|
4.訪問https://localhost:8443/cas/login,出現如下畫面:
app
|
輸入帳號和密碼
casuser
Mellon
登陸以後:webapp
|
此時說明服務器端已經配置成功。可經過https://localhost:8443/cas/logout退出登陸
3、配置cas client 客戶端(單獨一個Tomcat服務器,注意與cas server 的服務器端口號不要衝突,這裏默認改爲18080)
一、建立maven web項目 cas-client1。(以前已經建立一個,要部署多個client ,因此建立cas-client2)
|
建立出簡單的一個web項目,只有一個index.jsp頁面 ,如下是client2的目錄結構
|
二、在pom.xml文件中添加cas-client 的依賴(能夠手動添加,將從http://developer.jasig.org/cas-clients/上下載cas-client-3.1.12-release.zip,
在modules目錄下找到cas-client-core-3.1.12.jar、commons-collections-3.2.jar、commons-logging-1.1.jar複製到項目WEB-INF/lib下)
pom.xml添加如下代碼:
<dependency> <groupId>org.jasig.cas</groupId> <version>3.1.1</version> <artifactId>cas-client-core</artifactId> </dependency> |
三、在cas-client2項目的web.xml中配置cas 的過濾器
<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-mapping> <filter-name>CAS Single Sign Out Filter</filter-name> <url-pattern>/CasClient/*</url-pattern> </filter-mapping> <!-- 該過濾器負責用戶的認證工做,必須啓用它 --> <filter> <filter-name>CASFilter</filter-name> <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class> <init-param> <param-name>casServerLoginUrl</param-name> <!--這裏是搭建的 cas server 服務端的IP--> <param-value>https://sso.castest.com:8443/cas/login</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://localhost:18080</param-value> </init-param> </filter> <filter-mapping> <filter-name>CASFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 該過濾器負責對Ticket的校驗工做,必須啓用它 --> <filter> <filter-name>CAS Validation Filter</filter-name> <filter-class> org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class> <init-param> <param-name>casServerUrlPrefix</param-name> <param-value>https://sso.castest.com:8443/cas</param-value><!-- 此處必須爲登陸url/cas/,帶有任何其它路徑都會報錯,如「https://sso.castest.com:8443/cas/login」,這樣也會報錯。 --> </init-param> <init-param> <param-name>serverName</param-name> <!--這裏注意url 的路徑,sso.client1.com 在host文件中配置對應的127.0.0.1 端口號必定要與啓動Tomcat服務器的端口一致,通常cas server 服務器單獨部署, --> <param-value>http://sso.client1.com:18080</param-value> </init-param> </filter> <filter-mapping> <filter-name>CAS Validation Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 該過濾器負責實現HttpServletRequest請求的包裹, 好比容許開發者經過HttpServletRequest的getRemoteUser()方法得到SSO登陸用戶的登陸名,可選配置。 --> <filter> <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name> <filter-class> org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class> </filter> <filter-mapping> <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 該過濾器使得開發者能夠經過org.jasig.cas.client.util.AssertionHolder來獲取用戶的登陸名。 好比AssertionHolder.getAssertion().getPrincipal().getName()。 --> <filter> <filter-name>CAS Assertion Thread Local Filter</filter-name> <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class> </filter> <filter-mapping> <filter-name>CAS Assertion Thread Local Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- ======================== 單點登陸結束 ======================== --> <!-- session超時定義,單位爲分鐘 --> <session-config> <session-timeout>2</session-timeout> </session-config> |
四、在index.jsp中添加隨意標識,用於區分不一樣的應用程序
|
五、利用maven打包工具,將項目打壓成一個war包,在這裏注意:jar包的名稱就是對應訪問的端口號後面的項目名
在這裏使用IDEA的maven工具,點擊 package生成war包
|
在target目錄中生成了咱們須要的war包
|
六、將該war包放到cas client Tomcat中的webapps中
|
七、修改Tomcat目錄下的conf中server.xml ,將端口號改成18080 ,具體修改以下:
<Server port="18005" shutdown="SHUTDOWN"> <Connector port="18080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="18009" protocol="AJP/1.3" redirectPort="8443" /> <!---注意redirectPort 重定向端口號,必須跟cas server的端口號一致--> |
八、啓動cas-client 的Tomcat 服務器
九、先訪問 url1 :localhost:18080/cas-client1/index.jsp
而後訪問url2: localhost:18080/cas-client2/index.jsp
當訪問url1的時候,成功跳轉到cas server服務器上
|
登陸驗證以後 ,成功跳轉到client1的index.jsp頁面
|
當訪問url1 而且登陸成功後 ,而後訪問url2 ,就不須要再次驗證身份,直接跳轉到client2的index.jsp頁面
|
一個最簡單的單點登陸至此所有完成