今天開始寫CAS相關的第一篇文章,這篇文章主要是關於CAS環境的搭配,提供給剛剛接觸CAS的一個入門指南,並演示一個CAS的最簡單的實例html
博主的環境以下:java
tomcat服務器須要部署三個,我分別命名爲 apache-tomcat-8.0.15-app一、apache-tomcat-8.0.15-app二、apache-tomcat-8.0.15-casweb
序號
|
服務器名稱
|
用途
|
1
|
tomcat-app1
|
客戶端服務器1:用戶部署應用app1
|
2
|
tomcat-app2
|
客戶端服務器2:用戶部署應用app2
|
3
|
tomcat-cas
|
cas服務器:用來部署CAS server
|
CAS 默認認證方式使用的是HTTPS協議,通常對安全性不高的話建議取消改爲HTTP方式。由於,開啓的話會常常提示證書過時、須要用戶確認等,對客戶的感知很差,當前有須要的能夠開啓。spring
若是須要HTTPS協議的話,有關證書的生成能夠參考這篇文章 : CAS單點登陸證書導入 數據庫
取消HTTPS協議的方法,第四點會具體介紹,你們能夠接着往下看!apache
修改tomcat的相關啓動等端口,使機器能夠運行多個tomcat。個人訪問端口對應以下:tomcat
序號 | 服務器名稱 | 訪問端口 |
1 | tomcat-app1 | 8081 |
2 | tomcat-app2 | 8082 |
3 | tomcat-cas | 18080 |
端口的修改方法:打開 x:\tomcat-app1\conf\server.xml 文件, 找到安全
第一個:修改Shutdown端口(默認爲8005端口)
<Server port="8005" shutdown="SHUTDOWN">
第二個: 修改http訪問端口(默認爲8080端口)<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
第三個:修改8009端口
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
修改爲本身須要的端口便可。服務器
1)打開 cas-server\WEB-INF\deployerConfigContext.xml 文件 ,找到以下配置:cookie
<!-- Required for proxy ticket mechanism. --> <bean id="proxyAuthenticationHandler"
class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient" /> 增長參數p:requireSecure="false",是否須要安全驗證,即HTTPS,false爲不採用。修改後爲: <bean id="proxyAuthenticationHandler"
class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient" p:requireSecure="false" />
2)打開 cas-server\WEB-INF\spring-configuration\ticketGrantingTicketCookieGenerator.xml ,找到以下配置:
<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator" p:cookieSecure="true" p:cookieMaxAge="-1" p:cookieName="CASTGC" p:cookiePath="/cas" /> 修改 p:cookieSecure="true" 爲 p:cookieSecure="false" 即不開啓https驗證
3) 打開 cas-server\WEB-INF\spring-configuration\warnCookieGenerator.xml ,找到以下配置:
<bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator" p:cookieSecure="true" p:cookieMaxAge="-1" p:cookieName="CASPRIVACY" p:cookiePath="/cas" />
修改 p:cookieSecure="true" 爲 p:cookieSecure="false"
即不開啓https驗證
5.啓動 tomcat-cas ,訪問 http://localhost:18080/cas-server ,能夠看到以下界面
注意:cas-server4.0以前的默認驗證規則:只要用戶名和密碼相同就認證經過
4.0 以後規則改了,默認是配置在 deployerConfigContext.xml 配置文件中,能夠看到用戶名密碼爲 casuser/Mellon。
<bean id="primaryAuthenticationHandler" class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler"> <property name="users"> <map> <entry key="casuser" value="Mellon"/> </map> </property> </bean>
注:咱們直接用tomcat自帶的examples工程做爲客戶端例子
<!-- ========================單點登陸開始 ======================== --> <!--用於單點退出,該過濾器用於實現單點登出功能,可選配置 --> <listener> <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class> </listener> <!--該過濾器用於實現單點登出功能,可選配置。 --> <filter> <filter-name>CASSingle Sign OutFilter</filter-name> <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class> </filter> <filter-mapping> <filter-name>CASSingle Sign OutFilter</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>http://localhost:18080/cas-server/login</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://localhost:8081</param-value> </init-param> </filter> <filter-mapping> <filter-name>CASFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--該過濾器負責對Ticket的校驗工做,必須啓用它 --> <filter> <filter-name>CASValidationFilter</filter-name> <filter-class> org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter </filter-class> <init-param> <param-name>casServerUrlPrefix</param-name> <param-value>http://localhost:18080/cas-server</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://localhost:8081</param-value> </init-param> </filter> <filter-mapping> <filter-name>CASValidationFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 該過濾器負責實現HttpServletRequest請求的包裹, 好比容許開發者經過HttpServletRequest的getRemoteUser()方法得到SSO登陸用戶的登陸名,可選配置。 --> <filter> <filter-name>CASHttpServletRequest WrapperFilter</filter-name> <filter-class> org.jasig.cas.client.util.HttpServletRequestWrapperFilter </filter-class> </filter> <filter-mapping> <filter-name>CASHttpServletRequest WrapperFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 該過濾器使得開發者能夠經過org.jasig.cas.client.util.AssertionHolder來獲取用戶的登陸名。 好比AssertionHolder.getAssertion().getPrincipal().getName()。 --> <filter> <filter-name>CASAssertion Thread LocalFilter</filter-name> <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class> </filter> <filter-mapping> <filter-name>CASAssertion Thread LocalFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- ========================單點登陸結束 ======================== -->
4.啓動 tomcat-app1 ,而後訪問 http://localhost:8081/examples ,頁面會跳到
http://localhost:18080/cas-server/login?service=http%3A%2F%2Flocalhost%3A8081%2Fexamples%2F
說明單點成功
一樣的 tomcat-app2 我這邊就不演示了,
我把修改完的兩個web.xml 上傳上來
tomcat-app1 : web.xml
tomcat-app2 : web.xml
咱們首先依次把三個tomcat都啓動後 ,咱們先單獨訪問兩個客戶端看看效果
1. 訪問 http://localhost:8081/examples ==》 跳到 http://localhost:18080/cas-server/login?service=http%3A%2F%2Flocalhost%3A8081%2Fexamples%2F
2. 訪問 http://localhost:8082/examples ==》 跳到 http://localhost:18080/cas-server/login?service=http%3A%2F%2Flocalhost%3A8082%2Fexamples%2F
說明兩個客戶端第一次訪問時都須要跳轉到cas-server進行認證
接下來:咱們登陸其中一個客戶端 http://localhost:8081/examples ,帳號密碼 casuser/Mellon
登陸成功後 顯示下面的界面
而後咱們在打開一個新選項卡 ,直接訪問 http://localhost:8082/examples
能夠看到 不會跳轉到cas-server登陸界面 直接顯示下面的界面
說明 兩個客戶端單點登陸成功,登陸了其中一個,另外一個不須要登錄便可進行訪問。
單點登陸(Single Sign On , 簡稱 SSO )是目前比較流行的服務於企業業務整合的解決方案之一, SSO 使得在多個應用系統中,用戶只須要登陸一次就能夠訪問全部相互信任的應用系統。
上文只是介紹了最簡單的單點登陸例子,在實際開發中是不能使用的。若是須要應用到項目中,還須要許多個性化的訂製,好比登錄頁的美化、經過數據庫認證、服務端與客戶端用戶信息的交互等。這些都會在後面的文章中介紹到。
好了,第一篇大概就這樣了, 沒有什麼代碼,就不上傳源碼了,你們湊合的看吧!
下一篇會介紹 【登陸頁的個性化定製】。
打完收工。。。
!
!