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> |
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一次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)