[一]、概述
繼前面介紹過基於CAS實現單點登錄(SSO)的實例演示,演示過程中服務端認證機制採用的是測試環境的默認配置,本文將重點演示如何通過查詢數據庫,對用戶名和密碼進行相關的認證配置。
[二]、演示環境
- 基本環境同: 基於CAS實現單點登錄(SSO)的實例演示
- Mysql:5.1.51
[三]、演示步驟
1.創建演示的用戶數據
在mysql數據庫中創建Database,以 test 爲例,然後再創建用戶表:sso_t_user,詳細SQL如下:
CREATETABLE `sso_t_user` (
`Id` int(11) NOT NULLAUTO_INCREMENT,
`login_name` varchar(50) DEFAULTNULL,
`password` varchar(255) DEFAULTNULL,
PRIMARY KEY (`Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
向表sso_t_user 中插入如下數據:
INSERTINTO `sso_t_user` VALUES(1,'admin','96e79218965eb72c92a549dd5a330112');
INSERT INTO `sso_t_user` VALUES (2,'user','96e79218965eb72c92a549dd5a330112');
Tips:
- 密碼以MD5 加密後存放數據庫中爲例
- “111111”的MD5值爲:“96e79218965eb72c92a549dd5a330112”
2.修改cas服務端配置
在%tomcat_cas%/webapps/cas/WEB_INF/deployerConfigContext.xml 找到如下信息:
<beanclass="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler"/>
修改成如下:
<beanclass="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<propertyname="dataSource" ref="dataSource"></property>
<propertyname="sql" value="select password from sso_t_user wherelogin_name=?"></property>
<propertyname="passwordEncoder" ref="MD5PasswordEncoder"></property>
</bean>
同時增加datasource和加密處理兩個bean的定義:
<beanid="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"value="com.mysql.jdbc.Driver"/>
<propertyname="url" value="jdbc:mysql://localhost/test"/>
<propertyname="username" value="root"/>
<propertyname="password" value=""/>
</bean>
<bean id="MD5PasswordEncoder"
class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
<constructor-argindex="0" value="MD5" />
</bean>
注意
在配置過程中我遇到了異常:No bean named 'dataSource' isdefined,因爲dataSource配置到了authenticationManager這個Bean的裏面去了
QueryDatabaseAuthenticationHandler是cas-server-support-jdbc提供的查詢接口其中一個是通過配置一個SQL 語句查出
密碼,與所給密碼匹配;
sql語句就是查詢哪一張表,本例根據sso_t_user表的login_name字段查詢密碼,CAS會匹配用戶輸入的密碼,如果匹配則通過;
passwordEncoder這個是處理密碼的加密,如果想要你的應用中數據庫保存的是加密過的,比如本例是使用MD5加密的,所以配置了MD5PasswordEncoder這個Handler,cas內置了MD5的功能所以只需要配置一下就可以了;如果在實際應用中使用的是公司自己的加密算法那麼就需要自己寫一個Handler來處理密碼,實現方式也比較簡單,創建一個類繼承org.jasig.cas.authentication.handler.PasswordEncoder然後在encode方法中加密用戶輸入的密碼然後返回即可。
3.添加相關的jar包
需要在web項目的lib下添加兩個包:cas-server-support-jdbc-x.x.x.jar 和 mysql-connector-java-x.x.x-bin.jar(具體版本號根據情況而定)
4.測試認證過程
分別啓動已經配置好的三個tomcat分別爲:tomcat-cas、tomcat-app1、tomcat-app2.
此時在cas-server認證界面輸入:admin/111111,需要和數據庫中查詢到的密碼驗證匹配後才能登陸系統。