上周五打了第三针疫苗,要注意休息。
周六凑热闹看了LOL决赛,然后又看了尼公子,所以周日直接躺了。
只能今天更新了,直接上主题,如题所述,下方是正文。
像上一章中的配置,只是个测试的Demo而已,正常业务情况下,不可能只配置一个用户,用于身份验证。
本章就是要实现从数据库读取登录信息,并且进行身份验证,场景如下:
1. 连接数据库的指定表。
2. 指定用户名和密码字段。
3. 密码通过MD5加密。
以上看着貌似挺麻烦,其实CAS Server本身已经将此场景实现,只需要通过更改配置文件实现即可。
首先,修改配置文件。
还是application.properties配置文件,先注释掉之前的用户配置:
##
# CAS Authentication Credentials
#
#cas.authn.accept.users=casuser::Mellon复制
然后增加以下配置:
# 开启JDBC认证
cas.authn.jdbc.query[0].sql=SELECT * FROM `你的账户表名` WHERE loginname =?
cas.authn.jdbc.query[0].fieldPassword=你的密码字段
cas.authn.jdbc.query[0].url=jdbc:mysql://127.0.0.1:3306/你的库?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false
cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.MySQLDialect
cas.authn.jdbc.query[0].user=root
cas.authn.jdbc.query[0].password=root
cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver
# 密码加密方式
cas.authn.jdbc.query[0].passwordEncoder.type=com.你的.MD5PwdEncoder
cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8
cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5复制
然后,需要一个加密类。
如下自定义即可:
public class MD5PwdEncoder implements PasswordEncoder {
private final Logger logger = LoggerFactory.getLogger(MD5PwdEncoder.class);
private static final String[] HEX_DIGITS = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"a", "b", "c", "d", "e", "f"};
@Override
public String encode(CharSequence charSequence) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
String pwd = byteArrayToHexString(md.digest(charSequence.toString().getBytes(StandardCharsets.UTF_8)));
logger.info("encode方法:加密前( {} ),加密后( {} )", charSequence, pwd);
return pwd.toUpperCase();
} catch (NoSuchAlgorithmException e) {
logger.error("对密码进行md5加密异常", e);
return null;
}
}
@Override
public boolean matches(CharSequence charSequence, String s) {
// 判断密码为空,直接返回false
if (StringUtils.isBlank(charSequence)) {
return false;
}
//调用上面的encode 对请求密码进行MD5处理
String pass = this.encode(charSequence.toString());
logger.info("matches方法:请求密码为:{} ,数据库密码为:{},加密后的请求密码为:{}", charSequence, s, pass);
//比较密码是否相等
return pass.equals(s);
}
private static String byteArrayToHexString(byte b[]) {
StringBuilder resultSb = new StringBuilder();
for (byte aB : b) {
resultSb.append(byteToHexString(aB));
}
return resultSb.toString();
}
private static String byteToHexString(byte b) {
int n = b;
if (n < 0) {
n += 256;
}
int d1 = n / 16;
int d2 = n % 16;
return HEX_DIGITS[d1] + HEX_DIGITS[d2];
}
}复制
要注意的是,一定要继承自PasswordEncoder,这个接口是CAS中的。
最后,增加pom引用。
因为使用数据库验证,还需要JDBC的支持,所以在pom文件中增加以下引用:
<profile>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<id>default</id>
<dependencies>
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-webapp${app.server}</artifactId>
<version>${cas.version}</version>
<type>war</type>
<scope>runtime</scope>
</dependency>
<!--
...Additional dependencies may be placed here...
-->
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-jdbc</artifactId>
<version>${cas.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.36</version>
</dependency>
</dependencies>
</profile>复制
修改后的工程结构如下:
重新使用Maven Clean和Package命令后,启动tomcat,使用数据库中的用户名和密码登录:
以上,就是本次内容,如有错误,欢迎指正。
觉的不错?可以关注我的公众号↑↑↑
文章转载自字痕随行,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
2025年4月中国数据库流行度排行榜:OB高分复登顶,崖山稳驭撼十强
墨天轮编辑部
1872次阅读
2025-04-09 15:33:27
2025年3月国产数据库大事记
墨天轮编辑部
868次阅读
2025-04-03 15:21:16
2025年3月国产数据库中标情况一览:TDSQL大单622万、GaussDB大单581万……
通讯员
604次阅读
2025-04-10 15:35:48
征文大赛 |「码」上数据库—— KWDB 2025 创作者计划启动
KaiwuDB
497次阅读
2025-04-01 20:42:12
数据库,没有关税却有壁垒
多明戈教你玩狼人杀
486次阅读
2025-04-11 09:38:42
国产数据库需要扩大场景覆盖面才能在竞争中更有优势
白鳝的洞穴
464次阅读
2025-04-14 09:40:20
最近我为什么不写评论国产数据库的文章了
白鳝的洞穴
405次阅读
2025-04-07 09:44:54
天津市政府数据库框采结果公布!
通讯员
359次阅读
2025-04-10 12:32:35
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
356次阅读
2025-04-17 17:02:24
优炫数据库成功入围新疆维吾尔自治区行政事业单位数据库2025年框架协议采购!
优炫软件
336次阅读
2025-04-18 10:01:22