CAS單點登陸配置

無https驗證的CAS單點登陸配置html

 

1、下載開發環境

CAS服務器:cas-server-3.4.10-release.zipjava

CAS客戶端:cas-client-3.2.1-release.zipmysql

 

2、部署CASserver

解壓cas-server-3.4.10-release.zipmodules文件夾下的cas-server-webapp-3.4.10.war更名稱爲cas.war拷貝到tomcatwebapps下。啓動tomcat,訪問:http://localhost:8080/cas/login 就可以看到登陸界面了:web

 

CAS服務端默認採用的是username=password的驗證,並且採用的是https驗證,需要給tomact配置證書,本文配置沒有採用https驗證,若採用https驗證可參考:spring

http://www.cnblogs.com/shipengzhi/articles/2628849.html      sql

http://www.cnblogs.com/dycg/archive/2013/04/04/2999012.html數據庫

 

2.1server配置

2.1.1 登陸驗證

本文將原來的簡單驗證方式。更改成數據庫驗證usernamepassword。詳細操做例如如下所看到的。apache

 

1.     加入2個需要的jarwindows

      複製cas-server-3.4.10-release.zip\cas-server-3.4.10\modules下的cas-server-support-jdbc-3.4.10.jar以及mysql數據庫的tomcat

mysql-connector-java-x.x.x-bin.jarcas/WEB-INF/lib文件夾下

 

2     改動文件:cas\WEB-INF\deployerConfigContext.xml

新增dataSourceMD5PasswordEncoder兩個bean例如如下所看到的:

 

	<bean id="MD5PasswordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
		<constructor-arg index="0">
			<value>MD5</value>
		</constructor-arg>
	</bean>

	 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		   <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
		   <property name="url"><value>jdbc:mysql://localhost:3306/test</value></property>
		   <property name="username"><value>root</value></property>
		   <property name="password"><value>root</value></property>
	</bean>


上面我採用mysql數據庫。若數據庫不一樣,請自行更換數據庫連接方式。

 

3.     改動文件:cas\WEB-INF\deployerConfigContext.xml

<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />

將上面的bean替換(即覆蓋)成例如如下數據庫驗證bean

<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
	<property name="dataSource" ref="dataSource"></property>
	<property name="sql" value="select password from user where login_name=?"></property>
	<property name="passwordEncoder" ref="MD5PasswordEncoder"></property>
</bean>

就完畢數據庫驗證操做了。此處採用MD5加密驗證,password全部爲小寫字母

 

4. 數據庫表結構

     

2.1.2 用戶登出

server端退出訪問:http://localhost:8080/cas/logout

若但願退出後能返回操做則要配置服務端cas\WEB-INF\cas-servlet.xml

<bean id="logoutController" class="org.jasig.cas.web.LogoutController" ... .../>

添加屬性 p:followServiceRedirects="true"

退出連接爲

http://localhost:8080/cas/logout?service=http://localhost:8080/client/index.jsp

 

2.1.3 禁https驗證

本文配置是基於http協議的CAS,不採用https驗證。

1.     改動文件:cas\WEB-INF\deployerConfigContext.xml

<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient"/>

添加參數p:requireSecure="false",是否需要安全驗證,即HTTPSfalse爲不採用,加上去以後例如如下:

<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
p:httpClient-ref="httpClient" p:requireSecure="false"/>

2.  改動文件:cas\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"更改成false, TRUE爲採用HTTPS驗證,FALSE爲不採用https驗證

改動後例如如下所看到的:

	<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
		p:cookieSecure="false"
		p:cookieMaxAge="-1"
		p:cookieName="CASTGC"
		p:cookiePath="/cas" />

參數p:cookieSecure="true",同理爲HTTPS驗證相關,TRUE爲採用HTTPS驗證。FALSE爲不採用https驗證。

參數p:cookieMaxAge="-1"。簡單說是COOKIE的最大生命週期。-1爲無生命週期,即僅僅在當前打開的IE窗體有效。IE關閉或又一次打開其餘窗體,仍會要求驗證。可以依據需要改動爲大於0的數字,比方3600等,意思是在3600秒內,打開隨意IE窗體,都不需要驗證。

 

3、CASclient配置

 

1.  項目執行tomcat版本號:apache-tomcat-6.0.37-windows-x86

2.     解壓cas-client-3.2.1-release.zipmodules文件夾下的例如如下jar包(圖3.1)複製到實際project項目的lib文件夾下。

注意:原項目假設存在該jar包。請注意刪除反覆)。

這裏最easy出錯,本身推斷將modules下的所有jar與項目jar包控制衝突就能夠。

 

 

                                                                  圖3.1 CASclient需要jar包

 

3. web.xml中配置過濾器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
    <display-name>cas-web-client2</display-name>


<!-- =============================單點登陸配置開始=================================--> 
 <!-- 用於單點退出。該過濾器用於實現單點登出功能,通知其它應用單點登出-->  
 <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>http://sso.demo.com:8080/cas/login</param-value>  
                 <!--這裏的server是服務端的IP-->  
         </init-param>  
         <init-param>  
                 <param-name>serverName</param-name>  
                 <param-value>http://192.168.23.22</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>http://sso.demo.com:8080/cas</param-value>  
         </init-param>  
         <init-param>  
                 <param-name>serverName</param-name>  
                 <param-value>http://192.168.23.22</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>  
  
<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>  
<!-- =============================單點登陸配置結束=================================--> 

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

注意:

             1.     上面配置的http://sso.demo.com:8080/cas/loginCASserver地址,這裏不能用localhost127.0.0.1地址。僅僅能使用域名。那麼咱們本地測試則僅僅能改動hosts文件配置域名解析。

                          1)打開c:\windows\system32\drivers\etc\hosts

                          2)新增域名例如如下(本機ip,本身定義域名)

          

            2.     serverName爲當前項目ip地址:加port號,我當前爲80port。因此空缺。

 

      依據以上步驟java客戶端配置成功,公佈到tomcat。複製client1更名爲client2,啓動tomcat。訪問client1。跳轉到登陸頁面,登陸成功後成功轉向登陸成功頁面,這時訪問client2發現不需要登陸即顯示登陸成功頁面,java單點登陸成功。

 

 附加項目源代碼:http://download.csdn.net/detail/zhengyong15984285623/7944043

相關文章
相關標籤/搜索