单点登录之cas4.2.7服务端数据库配置(读数据库验证用户并对密码进行加密)

时间:2024-03-19 15:48:32

1、数据库中创建用户表

      1.1创建一个用户表

      1.2 插入两条测试用的用户数据

2、配置cas服务端

      2.1在WEB-INF/lib中添加jar包

      2.2修改deployerConfigContext.xml配置文件

      2.3修改cas.properties

3、测试

 

      正式使用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语句和你的这个表对应起来即可。

       为了简单,我这里只建了四个字段

如图:

    单点登录之cas4.2.7服务端数据库配置(读数据库验证用户并对密码进行加密)

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、插入两条测试用的用户数据

 

/*cjMD5加密后是:28198b369067e88dab9fefe85484dbf4

 worldMDT加密后是: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.7cas服务端其他jar包都有了,在本例中之需要添加上面两个包即可。

 

2.2、修改deployerConfigContext.xml配置文件

  该文件在WEB-INF/目录下。

  

第一步  注释掉原来的acceptUsersAuthenticationHandler配置


<alias  name="acceptUsersAuthenticationHandler"    alias="primaryAuthenticationHandler"  />

  

如图:

 单点登录之cas4.2.7服务端数据库配置(读数据库验证用户并对密码进行加密)

 

 第二步  新增己项配置

 

<!--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&amp;characterEncoding=UTF-8&amp;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  从数据库中的用户表中读取 -->

 

如图:

  单点登录之cas4.2.7服务端数据库配置(读数据库验证用户并对密码进行加密)

 

     注意:上面需要新增的配置可以直接拷贝到你的该文件中,然后修改数据库连接串中的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登录

 

如图:

 单点登录之cas4.2.7服务端数据库配置(读数据库验证用户并对密码进行加密)

登录成功

如图:

 单点登录之cas4.2.7服务端数据库配置(读数据库验证用户并对密码进行加密)

      注意:加密算法也可以不用md5,但是需要其他配置,还需要自己实现加密接口。如果根据本例步骤来做,没有成功,请回头看看本文一开始提到的那两篇文章。