单点登录(五)cas改造——使用jdbc进行用户验证

来源:互联网 发布:豫广网络 编辑:程序博客网 时间:2024/05/16 23:37

在前面的示例中,只要用户名密码保持一致,就可以直接登录了,而在实际的应用系统中,都需要从应用数据库中读取用户名和密码,下面就进行自定义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><!-- ... --><beanclass="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"p:httpClient-ref="httpClient" p:requireSecure="false" /><!-- ... --><beanclass="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


原创粉丝点击