單點登錄(五)cas改造——使用jdbc進行用戶驗證

在前面的示例中,只要用戶名密碼保持一致,就可以直接登錄了,而在實際的應用系統中,都需要從應用數據庫中讀取用戶名和密碼,下面就進行自定義CAS服務器的數據源的實驗。

準備數據庫

mysql數據庫test中新建表user

CREATE TABLE `user` (
  `username` varchar(46) NOT NULL,
  `password` varchar(46) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
爲該表增加兩條數據(密碼使用MD5加密)

insert into user(username,password) values('dylan',md5('dylan'));
insert into user(username,password) values('admin',md5('admin'));

 cas服務器配置

打開cas-serverWEB-INF/deployerConfigContext.xml文件,找到其中的authenticationManagerauthenticationHandlers屬性配置。默認的配置是這樣的:

<list>
	<!-- ... -->
	<bean		class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
		p:httpClient-ref="httpClient" p:requireSecure="false" />
	<!-- ... -->
	<bean		class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
</list>
可以看到這裏配置了一個SimpleTestUsernamePasswordAuthenticationHandler,這個用戶名密碼的認證器在認證用戶時,只要用戶名和密碼保持一致,就認爲是有效的用戶,這也是爲什麼在前面的測試中,只要輸入的用戶名和密碼一致就能登錄的原因。在實際的生產環境中,應該將該認證器取消掉。如換成如下的認證器:

xml代碼:


<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
	<property name="dataSource">
		<bean id="dataSource"
			class="org.springframework.jdbc.datasource.DriverManagerDataSource">
			<property name="driverClassName" value="com.mysql.jdbc.Driver" />
			<property name="url"				value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8" />
			<property name="username" value="root" />
			<property name="password" value="root" />
		</bean>
	</property>
	<property name="sql" value="select password from user where username=? " />
	<property name="passwordEncoder">
		<bean class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
			<constructor-arg value="MD5" />
		</bean>
	</property>
</bean>

該認證器可以從數據表user中查詢用戶密碼,並對密碼進行MD5加密校驗,這個認證器位於cas-server-support-jdbc包中,需要在項目中增加相應的jar包。如果使用的是maven配置,配置POM如下:


<dependency>
    <groupId>org.jasig.cas</groupId>
    <artifactId>cas-server-support-jdbc</artifactId>
    <version>3.3.1</version>
</dependency>

這裏用到了mysqlJDBC驅動,需要將相應的jar包加入cas服務器的lib目錄。


配置文件中可以看到,這裏的認證器配置的是一個list,默認情況下,只要有一個認證器通過認證,就認爲是合法的用戶,建議選擇合適的認證器放在最前面。

 

測試

重新啓動cas-server,進入登錄頁面,分別嘗試使用四組用戶進行測試:admin/admindylan/dylantest/testdylan/123456進行測試,結果前兩組登錄通過,後兩組登錄失敗,驗證成功。



參考資料:

http://wenku.baidu.com/view/f0b268d084254b35eefd34b8.html 

http://www.blogjava.net/tufanshu/archive/2011/01/21/343290.html 

http://www.kafeitu.me/sso/2010/11/05/sso-cas-full-course.html 

http://zxs19861202.iteye.com/blog/855856 

http://www.cnblogs.com/hellowood/archive/2010/08/05/1793364.html


發佈了25 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章