無https驗證的CAS單點登陸配置html
CAS服務器:cas-server-3.4.10-release.zipjava
CAS客戶端:cas-client-3.2.1-release.zipmysql
解壓cas-server-3.4.10-release.zip將modules文件夾下的cas-server-webapp-3.4.10.war更名稱爲cas.war拷貝到tomcat的webapps下。啓動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數據庫
本文將原來的簡單驗證方式。更改成數據庫驗證usernamepassword。詳細操做例如如下所看到的。apache
1. 加入2個需要的jar包windows
複製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.jar到cas/WEB-INF/lib文件夾下
2 改動文件:cas\WEB-INF\deployerConfigContext.xml
新增dataSource和MD5PasswordEncoder兩個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. 數據庫表結構
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
本文配置是基於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",是否需要安全驗證,即HTTPS。false爲不採用,加上去以後例如如下:
<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窗體,都不需要驗證。
1. 項目執行tomcat版本號:apache-tomcat-6.0.37-windows-x86
2. 解壓cas-client-3.2.1-release.zip將modules文件夾下的例如如下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/login是CASserver地址,這裏不能用localhost和127.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