2.2修改deployerConfigContext.xml配置文件
正式使用cas时,总不能再配置文件里读取用户信息吧,总要从该数据库里读取用户信息来进行登录验证,本例中使用的是cas服务端版本是4.2.7。war包的构建和下载请参考:
http://blog.csdn.net/pucao_cug/article/details/68945379
war包的部署(使用https的方式访问),请参考:
http://blog.csdn.net/pucao_cug/article/details/68942734
提示: 登录验证时候从数据库读取用户账号和密码相关的配置请继续看本博文的内容。
如果你是希望登录成功后,从数据库中读取更多的用户信息,那么你需要看该博文,博文地址:
http://blog.csdn.net/pucao_cug/article/details/70182968
1、数据库中创建用户表
在MySQL中创建一个名为userdb的数据库,然后在该数据库中创建一个名为t_user的用户表(其实数据库名称和用户表名称可以随便起的,只要在后续的配置中对应即可)。
该用户表并不受任何约束,使用你已有的用户表也行,里面的字段可以任意添加、任意取名,只要待会配置的sql语句和你的这个表对应起来即可。
为了简单,我这里只建了四个字段
如图:
1.2、创建一个用户表
CREATE TABLE `t_user` (
`id` bigint(15) NOT NULL COMMENT'主键',
`account` varchar(30) DEFAULT NULL COMMENT'账号',
`password` varchar(255) DEFAULT NULL COMMENT'密码',
`valid` tinyint(1) DEFAULT NULL COMMENT '是否有效',
PRIMARY KEY(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1.2、插入两条测试用的用户数据
/*cj用MD5加密后是:28198b369067e88dab9fefe85484dbf4
world用MDT加密后是:7d793037a0760186574b0282f2f435e7 */
insert into `t_user`(`id`,`account`,`password`,`valid`) values (25019377879351296,'cj','28198b369067e88dab9fefe85484dbf4',1),
(25019377879351297,'zhangsan','7d793037a0760186574b0282f2f435e7',1);
2、配置cas服务端
2.1、在WEB-INF/lib中添加jar包
将cas-server-support-jdbc-4.2.7.jar
和mysql-connector-java-5.1.38.jar
添加到cas服务端的WEB-INF/lib目录下
这两个包可以自行下载,也可以从这里下载:
http://download.csdn.net/detail/pucao_cug/9803241
注意:本来还依赖其他jar包的(比如c3p0等),但是4.2.7的cas服务端其他jar包都有了,在本例中之需要添加上面两个包即可。
2.2、修改deployerConfigContext.xml配置文件
该文件在WEB-INF/目录下。
第一步 注释掉原来的acceptUsersAuthenticationHandler配置
<alias name="acceptUsersAuthenticationHandler" alias="primaryAuthenticationHandler" />
如图:
第二步 新增己项配置
<!--begin 从数据库中的用户表中读取 -->
<bean id="MD5PasswordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" autowire="byName">
<constructor-arg value="MD5"/>
</bean>
<bean id="queryDatabaseAuthenticationHandler" name="primaryAuthenticationHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="passwordEncoder" ref="MD5PasswordEncoder"/>
</bean>
<alias name="dataSource" alias="queryDatabaseDataSource"/>
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
p:driverClass="com.mysql.jdbc.Driver"
p:jdbcUrl="jdbc:mysql://127.0.0.1:3306/userdb?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull"
p:user="root"
p:password="root"
p:initialPoolSize="6"
p:minPoolSize="6"
p:maxPoolSize="18"
p:maxIdleTimeExcessConnections="120"
p:checkoutTimeout="10000"
p:acquireIncrement="6"
p:acquireRetryAttempts="5"
p:acquireRetryDelay="2000"
p:idleConnectionTestPeriod="30"
p:preferredTestQuery="select 1"/>
<!--end 从数据库中的用户表中读取 -->
如图:
注意:上面需要新增的配置可以直接拷贝到你的该文件中,然后修改数据库连接串中的ip地址,数据库名称,登录账号和密码
该文件可以从这里下载(刚才已经下载过就不用重复下载了):
http://download.csdn.net/detail/pucao_cug/9803241
2.2、修改cas.properties
看过本文一开始提到的那两个文章,你应该知道4.2系列很多配置都改在了cas.properties里面了,本例中需要修改该文件。
增加配置:
cas.jdbc.authn.query.sql=select password from t_user where account=? and valid=true
注意:该SQL可以自己修改只要能根据账号查询出对应的密码字段即可,至于你的这些字段叫啥名字都没关系。
该文件可以从这里下载(刚才已经下载过就不用重复下载了):
http://download.csdn.net/detail/pucao_cug/9803241
3、测试
添加完jar包,修改过deployerConfigContext.xml和cas.properties之后,重启web容器,然后测试登录
使用账号cj密码cj登录
如图:
登录成功
如图:
注意:加密算法也可以不用md5,但是需要其他配置,还需要自己实现加密接口。如果根据本例步骤来做,没有成功,请回头看看本文一开始提到的那两篇文章。