1.引言

用于CAS系统登录的密码默认提供MD5和SHA加密的算法支持,但有时由于业务需要,以上两种算法都不能提供足够的支持,这时我们就需要自定义加密算法。比如笔者遇到的一个项目,密码的加密方式,是将密码MD5加密后再拼接数据库中一个盐值,这样的需求条件就必须对加密算法进行扩展。

2.解决方案

2.1.准备一个WEB的maven项目

CAS自定义数据加密算法_加密算法

2.2.拷贝cas的源码

CAS自定义数据加密算法_数据库_02

2.3.配置CAS

把之前配置好的内容移植过来
CAS自定义数据加密算法_加密算法_03

2.4.新建一个类,自定义加密处理

package com.bruce.encode;

import org.jasig.cas.authentication.handler.PasswordEncoder;
import sun.misc.BASE64Encoder;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
* @BelongsProject: cas-server
* @BelongsPackage: com.bruce.encode
* @Author: bruceliu

* @CreateTime: 2020-04-16 23:40
* @Description: TODO
*/
public class MyPasswordEncoder implements PasswordEncoder {

private static String salt = "bruce";

public String encode(String password) {
String result = "";
String newPW = password + salt;
System.out.println(newPW);
try {
//MessageDigest md = MessageDigest.getInstance("MD5");
//BASE64Encoder base64en = new BASE64Encoder();
//result = base64en.encode(md.digest(newPW.getBytes()));
String pass = StringUtil.MD5Encode(newPW);
result=pass.toLowerCase();
System.out.println("自定义加密算法..."+result);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}

2.5.deployerConfigContext中配置自定义的类

<!--数据库认证 -->     
<bean id="dbAuthHandler"
class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"
p:dataSource-ref="dataSource"
p:sql="select password from tb_user where username=? and status=1 and del=0"
p:passwordEncoder-ref="myPasswordEncoder"/>


<bean id="myPasswordEncoder" class="com.bruce.encode.MyPasswordEncoder" />

2.6 启动测试