單點登陸:英文名稱(Single Sign On),簡稱sso,是目前比較流行的服務於企業業務整合的解決方案之一,SSO 使得在多個應用系統中,用戶只須要登陸一次就能夠訪問全部相互信任的應用系統。html
而後,引用段話介紹一下cas特性(詳見http://www.360doc.com/content/15/0204/17/21706453_446251626.shtml):java
1) 開源的、多協議的SSO解決方案,CAS Server和CAS Client通訊支持多協議,如:CAS、Oauth、OpenID、SAML1.1、SAML2.0D等。web
2) 支持多種認證機制:Active Directory、JAAS、JDBC、LDAP、X.509 Certificates等。windows
3) 安全策略:使用票據(Ticket)來實現支持的認證協議;api
4) 支持多種客戶端:Java、.Net、PHP、Perl、Apache、 uPortal等。tomcat
5) 支持受權:能夠決定哪些服務能夠請求和驗證服務票據(Service Ticket)。安全
6) 提供高可用性:經過把認證過的狀態數據存儲在TicketRegistry組件中,這些組件有不少支持分佈式環境的實現。服務器
CAS包含CAS Server和CAS Client兩個部分。下面咱們看一看他的運行原理,首先借用一張cas經常使用的基礎協議流程圖session
大體流程是,在客戶機在在訪問cas客戶端時都須要請求服務端驚醒身份驗證,再驗證未經過是時,會被重定向至cas的服務端進行登錄,然後再次驗證,經過以後又重定向到客戶端界面。這裏只是一些文字描述,真正的實現咱們接下來看如何操做:app
首先,我須要介紹一下,配置cas的服務端有兩種方式:一種是http方式,另外一種是https方式。筆者這裏將演示如何配置https方式的cas服務端。
第一步咱們確定是須要準備咱們的原材料:筆者這裏用的是cas-server-4.0.7.war,tomcat7
首先須要的是導出你的證書,使用jdk的keytool工具,命令以下:
keytool -genkey -alias castest -keyalg RSA -keystore C:/key/casKey.keystore
這裏是生成你的keystore文件,C:/key/casKey.keystore是指文件生成路徑,即c盤下的key文件夾下生成casKey.store文件,注意文件夾必定要存在這裏你會輸入你的證書信息,注意口令爲你的密碼,用戶名將爲你後期配置服務端請求的域名
第二步導出crt文件:
keytool -export -file C:/key/casKey.crt -alias castest -keystore C:/key/casKey.keystore
執行完這兩步,你將生成兩個文件:
第三步:將生成的證書導入你的運行jdk中:
keytool -import -keystore "C:/Program Files/Java/jdk1.8.0_131/jre/lib/security/cacerts" -file C:/key/casKey.crt -alias castest
這裏須要注意的是你的路徑必定要爲你的jdk->jre->lib->security,若是你的路徑下存在此文件,則須要將其刪除,再執行導入,密鑰庫口令默認爲changeit
而後將生成的證書文件文件拷貝至jdk->bin下,在c://windows/System32/drivers/etc/hosts文件中添加你的域名映射,沒有該文件需建立一個hosts文件,添加內容以下
127.0.0.1 sso.castest.com
接下來就開始配置tomcat環境了,首先將你的cas-server-4.0.7.war拷貝至tomcat的webapps下,更名爲cas.war。打開tomcat->conf->server.xml,找到以下內容:
將其反註釋,修改成:
<Connector port="8086" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="C:/key/casKey.keystore" keystorePass="casDemo" />
這裏須要注意:keystoreFile爲你第一步生成的keystore文件的位置,keystorePass爲你第一步輸入的口令密碼,不是changeit
接下來作個測試,啓動tomcat,輸入地址https://sso.castest.com:8086/cas/,出現以下界面
添加好信任以後,進入以下界面,則說明服務端配置成功:
ok,以上步驟若是沒有成功,請仔細檢查以前步驟。成功了以後,恭喜,那就能夠進入客戶端端的配置了,首先,下載服務端架包,這裏用的是cas-client-core-3.2.1.jar,而後準備一個測試tomcat,用來測試單點登陸,建立一個web項目,取名爲casDemo001
pom.xml加入以下:
<dependency> <groupId>org.jasig.cas.client</groupId> <artifactId>cas-client-core</artifactId> <version>3.2.1</version> </dependency>
<!-- https://mvnrepository.com/artifact/commons-collections/commons-collections --> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.2</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging --> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency>
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"> <!-- ======================== 單點登陸開始 ======================== --> <!-- 用於單點退出,該過濾器用於實現單點登出功能,可選配置--> <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>/*</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> <param-value>https://sso.castest.com:8086/cas/login</param-value> </init-param> <!-- 指定客戶端的域名和端口,是指客戶端應用所在機器而不是 CAS Server 所在機器如下配置表示, 系統部署在域名爲shirui-55的機器上,端口爲80 --> <init-param> <param-name>serverName</param-name> <param-value>http://localhost:8111</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:8086/cas</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://localhost:8111</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> </web-app>
這裏需注意的是關於兩個casServer的url的編寫
啓動tomcat(須要修改端口號,要否則後報端口號被佔用錯誤,這裏修改成8111,固然你能夠根據本身的愛好修改,對這裏來講無關痛癢),將項目運行,啓動成功後輸入地址:localhost:8111/casDemo001/,出現以下界面
這就證實配置成功了,你的請求已經被攔截,而且正確的跳到了你的cas服務器登陸界面,輸入帳號密碼:casuser Mellon(這是cas默認的登陸帳戶,配置數據驗證的話下一篇博文會講述),登錄後出現以下界面:
而後刷新cas服務端的界面,出現以下圖界面:
至此,cas服務端與客戶端的配置已經完成,服務端文件下載連接連接:https://pan.baidu.com/s/1qY1H0aK 密碼:7e52