单点登录时可以使用加密后的密码

编辑
文档创建者:漩涡 (128 )     浏览次数:4296次     编辑次数:8次     最近更新:ukae 于 2018-06-15     

目录:

前言编辑

在通常情况下,使用帆软决策平台的时候,不论是使用内置的登录界面,还是使用单点登录,都只能使用明文的密码,而不能使用加密后的密码,这是一个很正常的设计,因为用户本身确实也不应该知道自己的密码加密后是什么样的。

但是,比如说你现在有另外一套,想通过单点登录访问报表平台,但是你平台上面用的是MD5加密的密码,但是单点登录只支持明文密码登录,这就需要通过一定的二次开发来实现了。

实现步骤编辑

关键接口

主要的接口就是 com.fr.privilege.providers.dao.PasswordValidator,这个接口是用来认证是时候判断用户名密码是否匹配的。

示例实现

以MD5加密为例

package com.fr.privilege; import com.fr.privilege.providers.dao.MessageDigestPasswordValidator; 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; } }

将编译好的class文件置于%FR_HOME%/WebReport/web-inf/classes/com/fr/privilege文件夹下。

平台设置

我们只需要继承内置的MD5加密类,登录决策平台,点击管理系统>用户管理>设置>同步数据集>加密方式中选择自定义密码加密,填写使用这个类编译出来的class文件com.fr.privilege.MyPasswordValidator,就可以在认证的时候,明文或者加密后的密码认证都可以通过了,如下图:

222

注:关键代码就是示例中的第12行和第13行,这两行判断如果传递的是加密后的代码,并且比对成功,也是作为认证通过的。

附件列表


主题: 部署集成
如果您认为本文档还有待完善,请编辑

文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

此页面有帮助吗?