测试

Cas 数据源之Mysql

  Cas 默认使用简单用户密码认证,当用户密码一致时则认证通过。

  配置文件:/cas/WEB-INF/deployerConfigContext.xml

  默认配置如下:

1
<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />

  

  下面为Cas使用Mysql作为数据源的例子。

  • 数据准备

  创建表,其中: type 可以为 用户名、邮箱、手机,这样就可以支持多种方式登录

1
2
3
4
5
6
7
create table cas_user_credential (
    user_id varchar(120),
    user_name varchar(120),
    encrpted_pwd varchar(120) ,
    type varchar(120), 
    enable_flag(10),
    primary key (user_id,user_name));

   插入三条数据,其中密码经过了加密,后面讲结束加密方式,密码为 a123456

1
2
3
insert into cas_user_credential (user_id,user_name,encrpted_pwd,type,enable_flag) values('1','hello','iVsxfHa45QTC+zLbtEIBePYM4yE=','username','Y');
insert into cas_user_credential (user_id,user_name,encrpted_pwd,type,enable_flag) values('1','hello@gmail.com','iVsxfHa45QTC+zLbtEIBePYM4yE=','mail','Y');
insert into cas_user_credential (user_id,user_name,encrpted_pwd,type,enable_flag) values('1','13500000000','iVsxfHa45QTC+zLbtEIBePYM4yE=','mobile','Y');
  • 配置Cas Mysql 数据源

  在deployerConfigContext.xml中添加bean,配置Mysql datasource,需要将 mysql-connector-java-5.1.35.jar (任意版本) 添加到 cas/WEB-INF/lib 

1
2
3
4
5
6
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"
    <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> 
    <property name="url" value="jdbc:mysql://localhost:3306/cas"></property> 
    <property name="username" value="cas"></property> 
    <property name="password" value="a123456"></property>    
</bean>

  配置认证类,注释上面的 SimpleTestUsernamePasswordAuthenticationHandler,配置基于数据源的认证类

1
2
3
4
5
6
7
8
<!--
<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
-->
 
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
    <property name="dataSource" ref="dataSource" />
    <property name="sql" value="select encrpted_pwd from cas_user_credential where enable_flag = 'Y' and lower(user_name) = lower(?)" />    
</bean>  
  • 密码加密

  用户密码产生时会进行不可逆加密处理再保持到数据库,所以Cas认证密码时需要把登录密码进行同样的加密处理再与DB的已加密密码比对。

  在deployerConfigContext.xml中添加加密bean,该类可以使用Cas提供的默认类,也可以使用自定义加密算法。

1
<bean id="passwordEncoder" class="com.cux.cas.CuxPasswordEncoder"/>

  在认证类中配置加密属性,基于上面的配置加上 passwordEncoder属性即可。

1
2
3
4
5
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
    <property name="dataSource" ref="dataSource" />
    <property name="sql" value="select encrpted_pwd from cas_user_credential where enable_flag = 'Y' and lower(user_name) = lower(?)" />    
    <property name="passwordEncoder" ref="passwordEncoder"/>
</bean>  

  下面提供加密类 com.cux.cas.CuxPasswordEncoder 源码

  加密类需实现Cas认证的加密接口

  依赖jar包为:cas-server-core-3.4.8.jar 、spring-security-core-3.0.5.RELEASE.jar, 这两个jar包在 /cas/WEB-INF/lib下都有

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.cux.cas;
 
import org.jasig.cas.authentication.handler.PasswordEncoder; 
import org.springframework.security.authentication.encoding.ShaPasswordEncoder; 
 
public class CuxPasswordEncoder implements PasswordEncoder {
 
    @Override 
    public String encode(String args) { 
        ShaPasswordEncoder encoder = new ShaPasswordEncoder(); 
        encoder.setEncodeHashAsBase64(true); 
        return encoder.encodePassword(args, null); 
    
}

  将上面的java类编译并打成jar包放到 /cas/WEB-INF/lib,再重启tomcat即完成整个配置过程,用户可以使用用户名、邮箱、手机三种方式登录。

  

  附:Cas自带MD5密码加密类,位于 /cas/WEB-INF/lib/cas-server-core-3.5.2.jar

1
2
3
4
5
<bean id="Md5PasswordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
        <constructor-arg index="0">
            <value>MD5</value>
        </constructor-arg>
</bean>

  

1
2
3
4
5
6
7
8
9
<!--
<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
-->
 
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
    <property name="dataSource" ref="dataSource" />
    <property name="sql" value="select encrpted_pwd from cas_user_credential where enable_flag = 'Y' and lower(user_name) = lower(?)" />    
    <property name="passwordEncoder" ref="<strong>Md5PasswordEncoder</strong>"/>
</bean>  

  

  

 

posted @   Genter  阅读(3754)  评论(0编辑  收藏  举报
编辑推荐:
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
阅读排行:
· 官方的 MCP C# SDK:csharp-sdk
· 一款 .NET 开源、功能强大的远程连接管理工具,支持 RDP、VNC、SSH 等多种主流协议!
· “你见过凌晨四点的洛杉矶吗?”--《我们为什么要睡觉》
· 提示词工程师自白:我如何用一个技巧解放自己的生产力
· C#/.NET/.NET Core技术前沿周刊 | 第 31 期(2025年3.17-3.23)

测试

点击右上角即可分享
微信分享提示