本文将重点演示如何通过查询数据库,对用户名和密码进行相关的认证配置。数据库用的是mysql数据库 mysql5.x
[二]、演示环境
基本环境同: 基于CAS实现单点登录(SSO)演示
Mysql:5.1.51,windows7 myeclipse2014,jdk1.6_45,tomcat 5.x
三]、演示步骤
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 中插入如下数据密码是md5加密:
INSERTINTO `sso_t_user` VALUES(1,'admin','96e79218965eb72c92a549dd5a330112');
INSERT INTO `sso_t_user` VALUES (2,'vipyhd','96e79218965eb72c92a549dd5a330112');
密码以MD5 加密后存放数据库中为例
“111111”的MD5值为:“96e79218965eb72c92a549dd5a330112”
2.修改cas服务端配置
在%tomcat_cas%/webapps/cas/WEB_INF/deployerConfigContext.xml 找到如下信息:
<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler"/>
修改成如下:
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<propertynamepropertyname="dataSource" ref="dataSource"></property>
<propertynamepropertyname="sql" value="select password from sso_t_user wherelogin_name=?"></property>
<propertynamepropertyname="passwordEncoder" ref="MD5PasswordEncoder"></property>
</bean>
同时增加datasource和加密处理两个bean的定义:
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"value="com.mysql.jdbc.Driver"/>
<propertynamepropertyname="url" value="jdbc:mysql://localhost/test"/>
<propertynamepropertyname="username" value="root"/>
<propertynamepropertyname="password" value=""/>
</bean>
<bean id="MD5PasswordEncoder"
class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
<constructor-argindexconstructor-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,需要和数据库中查询到的密码验证匹配后才能登陆系统。