单点登录时可以使用加密后的密码
前言
在通常情况下,使用帆软决策平台的时候,不论是使用内置的登录界面,还是使用单点登录,都只能使用明文的密码,而不能使用加密后的密码,这是一个很正常的设计,因为用户本身确实也不应该支持自己的密码加密后是什么样的。
但是,比如说你现在有另外一套,想通过单点登录访问报表平台,但是你平台上面用的是MD5加密的密码,但是单点登录只支持明文密码登录,这就需要通过一定的二次开发来实现了。
实现步骤
关键接口
主要的接口就是 com.fr.privilege.providers.dao.PasswordValidator,这个接口是用来认证是时候判断用户名密码是否匹配的。
示例实现
以MD5加密为例
package com.fr.privilege;
import com.fr.privilege.providers.dao.MessageDigestPasswordValidator;
import com.fr.third.fr.pdf.slf4j.Logger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MyPasswordValidator extends MessageDigestPasswordValidator {
public boolean validatePassword(String localPassword, String clientPassword) {
String pass1 = "" + localPassword;
if (pass1.equalsIgnoreCase(clientPassword)) {
return true;
}
String pass2 = encodePassword(clientPassword);
return pass1.equalsIgnoreCase(pass2);
}
@Override
public String encodePassword(String clinetPassword) {
return (encryption(clinetPassword));
}
public String encryption(String plainText) {
String re_md5 = new String();
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(plainText.getBytes());
byte b[] = md.digest();
int i;
StringBuffer buf = new StringBuffer("");
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if (i < 0)
i += 256;
if (i < 16)
buf.append("0");
buf.append(Integer.toHexString(i));
}
re_md5 = buf.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return re_md5;
}
}
平台设置
我们只需要继承内置的MD5加密类,登录决策平台,点击管理系统>用户管理>设置>同步数据集>加密方式中选择自定义密码加密,填写使用这个类编译出来的class文件com.fr.privilege.MyPasswordValidator,就可以在认证的时候,明文或者加密后的密码认证都可以通过了,如下图:
注:关键代码就是示例中的第12行和第13行,这两行判断如果传递的是加密后的代码,并且比对成功,也是作为认证通过的。
附件列表
主题: 部署集成
标签:
平台认证