1.引言
用于CAS系统登录的密码默认提供MD5和SHA加密的算法支持,但有时由于业务需要,以上两种算法都不能提供足够的支持,这时我们就需要自定义加密算法。比如笔者遇到的一个项目,密码的加密方式,是将密码MD5加密后再拼接数据库中一个盐值,这样的需求条件就必须对加密算法进行扩展。
2.解决方案
2.1.准备一个WEB的maven项目
2.2.拷贝cas的源码
2.3.配置CAS
把之前配置好的内容移植过来
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
* @QQ:1241488705
* @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" />