在上一篇文章中我们已经搭建好了一个简单的cas服务端,该服务端并未访问数据库进行用户名和密码验证,而是在配置文件中规定的用户名和密码,大家在配置的cas服务器的D:\apache-tomcat-6.0.29\webapps\cas\WEB-INF路径下找到文件deployerConfigContext.xml打开如下图所示:
在图中可以看到规定的用户名和密码:casuser/Mellon(老版本的可能不一样,这里用的是cas server 4.0),在项目中我们肯定是要访问数据库进行用户名和密码的验证的,显而易见我们要更改这个文件的配置。首先,我们要把上图中这段代码注释掉,然后换成如下代码:
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@192.168.0.xxx:1521:orclgbk</value>
</property>
<property name="username">
<value>spjx2</value>
</property>
<property name="password">
<value>xxx</value>
</property>
</bean>
<bean id="primaryAuthenticationHandler"
class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="sql"
value="select password from sys_user where 1=1 and username=? and flag=1" />
<property name="dataSource" ref="dataSource" />
</bean>
从以上代码可以看出我用的是oracle数据库,你可以选择使用自己适合的数据库(这里省略了创建数据库和建表的操作),在id="dataSource" 的bean中看到需要引入数据库驱动、url、用户名、密码,id="primaryAuthenticationHandler"的bean是用来链接数据库并验证用户名和密码,有关“org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler”的解释请到这篇“
使用 CAS 在 Tomcat 中实现单点登录”文章中看,里边有详细的解释。
另外,一般数据库中的密码都是经过加密的,我这里测试的是没有加密的,如果经过了MD5加密,就要增加如下配置:
<bean id="MD5PasswordEncoder"
class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
<constructor-arg index="0" value="MD5" />
</bean>
同时修改
<bean id="primaryAuthenticationHandler"
class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="sql"
value="select password from sys_user where 1=1 and username=? and flag=1" />
<property name="dataSource" ref="dataSource" />
<property name="passwordEncoder" ref="MD5PasswordEncoder" />
</bean>
然后,我们只需要从我门下载的cas-server-4.0.0-release.zip,解压后在cas-server-4.0.0\modules路径下的cas-server-support-jdbc-4.0.0.jar包复制到cas服务器的apache-tomcat-6.0.29\webapps\cas\WEB-INF\lib中,然后不要忘了导入数据库驱动包,我这里用的是oracle,导入了ojdbc6.jar包。
到此,我们的配置就结束了,现在重启服务器,在浏览器中输入路径:http://localhost:8080/examples/servlets/servlet/HelloWorldExample,进入登录页面,输入数据库中存在的用户名和密码,如下图:
点击登录跳转到了如下页面:
到了这个页面说明我们已经成功了,另外,从后台服务器打印中可以看出服务器访问了数据库进行了,用户名和密码的验证,如下图:
我随意输入一个错误的用户名和密码可以看到如下的验证失败的打印信息: