一、特殊名词介绍

二、背景、场景介绍

低版本的决策平台用户密码和一些敏感信息诸如SQL之类的传输过程中,并未使用加密传输或者使用了很简单的b64编码传输。对于一些特殊的企业或者行业用户来说,安全性还需要进一步的提升。故在10.0的版本中开放了TransmissionDecryptProvider接口,用于处理一些敏感数据的加密传输问题(主要用于用户密码的加密传输)。由于传输加密的过程是可逆的,所以如果多个插件存在需要记录加密的顺序才能正常解密,这样会导致多个插件共存时的一些可靠性问题。故在2021年4月分的发布版本中将接口更改为独占接口TransmissionEncryptionProcessor。

三、接口介绍

package com.fr.decision.fun;

import com.fr.stable.fun.mark.Immutable;
import com.fr.stable.fun.mark.WebCoalition;

/**
 * 传输加密、解密接口
 *
 */
public interface TransmissionEncryptionProcessor extends Immutable, WebCoalition {

    String MARK_STRING = "TransmissionEncryptionProcessor";

    int CURRENT_LEVEL = 1;

    /**
     * 加密
     *
     * @param plainInfo 明文信息
     * @return 加密后的信息
     */
    String encrypt(String plainInfo);

    /**
     * 解密
     *
     * @param encryptionInfo 加密信息
     * @return 解密后的信息
     */
    String decrypt(String encryptionInfo);
}


package com.fr.decision.fun;

import com.fr.stable.fun.mark.WebCoalition;

/**
 * 传输解密接口,把前端传递给后端的加密信息解密成原文
 * 该接口已过期,请使用com.fr.decision.fun.TransmissionEncryptionProvider
 *
 * @author Zed
 * @version 10.0
 * Created by Zed on 2020/2/3
 */
@Deprecated
public interface TransmissionDecryptProvider extends WebCoalition {

    String MARK_STRING = "TransmissionDecryptProvider";

    int CURRENT_LEVEL = 2;

    /**
     * 解密
     *
     * @param encryptionInfo 加密信息
     * @return 解密后的信息
     */
    String decrypt(String encryptionInfo);
}

WebCoalition


四、支持版本

产品线

版本

支持情况

备注

FR10.0支持
BI5.1支持
BI5.1.2支持
BI5.1.3支持

五、插件注册

<extra-decision>
    <TransmissionEncryptionProcessor class="your class name"/>
    <TransmissionDecryptProvider class="your class name"/>
</extra-decision>


六、原理说明

该接口在需要调用的地方通过:

TransmissionEncryptionProcessor processor = ExtraDecisionClassManager.getInstance().getSingle(TransmissionEncryptionProcessor.MARK_STRING);

Set<TransmissionDecryptProvider> provider = ExtraDecisionClassManager.getInstance().getArray(TransmissionDecryptProvider.MARK_STRING);

获取到插件中申明的接口实现。

在产品中主要通过以下方式使用:当存在敏感信息需要加密传输是,通过TransmissionTool 提供的对应加密和解密的方法,其中TransmissionEncryptionProcessor接口包括了加密和解密而TransmissionDecryptProvider只能做解密。

七、特殊限制说明

前端实现接口如下

//示例加解密仅用于说明接口的使用,实际加解密尽可能设计成动态的可逆加密
BI.config("dec.provider.cipher", function (provider) {
	provider.encrypt(function (data) {
		return data+"demo";
	});
	provider.decrypt(function (code) {
		return code.substring( 0, code.length-4 );
	});
});

不论是前端的dec.provider.cipher接口还是后端的TransmissionEncryptionProcessor和TransmissionDecryptProvider接口,使用的加解密一定是可逆的。

在2021年4月之前的版本中dec.provider.cipher接口不需要实现decrypt方法。

八、常用链接

demo地址:demo-transmission-decrypt-provider

九、开源案例

免责声明:所有文档中的开源示例,均为开发者自行开发并提供。仅用于参考和学习使用,开发者和官方均无义务对开源案例所涉及的所有成果进行教学和指导。若作为商用一切后果责任由使用者自行承担。

decision-transmission-decrypt