CAS 配置数据库方式账户认证

    该篇博文转自:https://www.imooc.com/article/3729

        CAS给出的缺省例子是将账户信息(用户名/密码)放在配置文件中,实际运行系统,账户信息通常是在数据库中保存。现在我们就配置一下如何对数据库中保存的账户进行认证。具体配置参考如下:

    

1. 首先,在mysql数据库中建立一张账户表account,并添加一些账户例子。
q5
注意,密码我们使用了MD5加密方式。

2. 在deployerConfigContext.xml文件中找到bean id="primaryAuthenticationHandler" 区并注释掉,替换成如下内容:

<bean id="primaryAuthenticationHandler" 
  class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">   
 <property name="dataSource" ref="dataSource" />   
 <property name="sql" value="select password from account where username=? " />  <property  name="passwordEncoder"  ref="passwordEncoder"/>
</bean>

也就是说,我们替换了认证插件,采用SQL语句访问数据库获取密码认证方式。QueryDatabaseAuthenticationHandler在cas-server-support-jdbc子工程中。

CAS提供了多种认证方式,除JDBC访问数据库外,还可以使用LDAP、x509、spnego等方式,这些都以子工程插件的方式提供。当然,我们同样可以开发自己需要的插件。

由于我们密码使用了MD5加密方式,我们引进了passwordEncoder,定义如下:

<bean id="passwordEncoder"      
    class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" autowire="byName">          
  <constructor-arg value="MD5"/>   
  <property name="characterEncoding">   
    <value>UTF-8</value>   
  </property>
</bean>

然后我们定义数据源,这在spring工程中很常见:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">   
  <property name="driverClassName">   
    <value>com.mysql.jdbc.Driver</value>   
  </property>   
  <property name="url">   
    <value>jdbc:mysql://127.0.0.1:3306/jiweibu?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true</value>   
  </property>   
  <property name="username" value="root" />   
  <property name="password" value="123456" />   
  <property name="initialSize" value="10" />
  <property name="maxActive" value="500" />  
  <property name="maxWait" value="60000" />  
  <property name="validationQuery"><value>select 1</value></property>
</bean>

3. 在pom.xml中引入下面三个工程包,包括CAS JDBC认证插件、Mysql驱动还有dbcp连接池:

<dependency>
  <groupId>org.jasig.cas</groupId>
  <artifactId>cas-server-support-jdbc</artifactId>
  <version>${project.version}</version>
  <scope>compile</scope>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.26</version>
</dependency>
<dependency>
  <groupId>commons-dbcp</groupId>
  <artifactId>commons-dbcp</artifactId>
  <version>1.4</version>
</dependency>

重新编译build,运行修改的CAS认证中心,使用数据库中的账号尝试登录。

至此,我们介绍了如何修改登录登出流程,如何修改CAS Server相关界面,如何实现记住密码免登录功能,以及如何访问数据库中账号去认证。通过这些实践活动,我们对CAS有了相当的理解,可以应对一般的应用场景了。

后面,我们将进一步深入CAS,解决在大型互联网应用中,基于CAS实现SSO需要关注的问题。


猜你喜欢

转载自blog.csdn.net/qq_34125349/article/details/80295517