CAS服务器实验之六:自定义CAS服务器数据源

在前面的示例中,使用的用户名和密码都是自己捏造出来的,而在实际的应用系统中,都需要从应用数据库中读取用户名和密码,下面就进行自定义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,这个用户名密码的认证器在认证用户时,只要用户名和密码保持一致,就认为是有效的用户,这也是为什么在前面的测试中,只要输入的用户名和密码一致就能登录的原因。在实际的生产环境中,应该将该认证器取消掉。如换成如下的认证器:

 

<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&amp;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>${project.version}</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

猜你喜欢

转载自dinguangx.iteye.com/blog/1845122