【仅供内部供应商使用,不提供对外解答和培训】

Page tree

【仅供内部供应商使用,不提供对外解答和培训】

Skip to end of metadata
Go to start of metadata

一、特殊名词介绍

二、背景、场景介绍

帆软的决策平台默认有 平台内置认证、LDAP认证、Http认证三种认证方式。也提供了额外的认证接口PassportProvider,允许用户扩展一些符合自身使用要求的特殊认证方法。

三、接口介绍

PassportProvider.java
package com.fr.decision.fun;

import com.fr.decision.authorize.Passport;
import com.fr.decision.webservice.bean.authentication.PassportBean;
import com.fr.stable.fun.mark.Mutable;

/**
 * 自定义认证方式接口
 * Created by zhouping on 2018/12/13.
 */
public interface PassportProvider extends Mutable {

    String MARK_STRING = "PassportProvider";

    int CURRENT_LEVEL = 1;

    /**
     * 认证类型
     *
     * @return 认证类型
     */
    String passportType();

    /**
     * 注册自定义认证方式业务对象类
     *
     * @return 对象
     */
    Class<? extends PassportBean> classForPassportBean();

    /**
     * 注册自定义认证方式数据库配置类
     *
     * @return 配置
     */
    Class<? extends Passport> classForPassportConfig();

}

Passport.java
package com.fr.decision.authorize;

/**
 * 通行证校验接口。
 * 只有通过了通信证校验的登录操作,才会被授予后续可以使用的令牌。
 */
public interface Passport {

    boolean checkTicket(String username, String inputPassword, String savedPassword, String hashPassword);

    String markType();
}

PassportBean.java
package com.fr.decision.webservice.bean.authentication;

import com.fr.decision.authorize.Passport;
import com.fr.decision.webservice.bean.BaseBean;
import com.fr.third.fasterxml.jackson.annotation.JsonTypeInfo;

/**
 * 登录认证方式
 * Created by zhouping on 2018/3/4.
 */
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
public abstract class PassportBean<T extends Passport> extends BaseBean {
    private static final long serialVersionUID = 3002910431724542517L;

    //认证类型
    private String type;
    //用户来源
    private int creationType = 0;

    public PassportBean() {
    }

    public String getType() {
        return markType();
    }

    public void setType(String type) {
        this.type = markType();
    }

    public int getCreationType() {
        return creationType;
    }

    public void setCreationType(int creationType) {
        this.creationType = creationType;
    }

    public abstract String markType();

    public abstract PassportBean<T> createPassportBean(T passport);

    public abstract Passport createPassport();

}

前端接口
BI.config("dec.user.setting.authentications", function (items) {
	items.push({
		value: "认证方式的标识符",
        text: "认证方式的名称",
        "@class": "PassportBean的类名",
        component: {
			type: "认证方式的配置UI组件类型"
		}
	});
	return items;
});

四、支持版本

产品线

版本

支持情况

备注

FR10.0支持
BI5.1支持不支持BI的仪表板
BI5.1.2支持不支持BI的仪表板
BI5.1.3支持不支持BI的仪表板

五、插件注册

plugin.xml
<extra-decision>
	<WebResourceProvider class="your classname"/>
	<PassportProvider class="your classname"/>
</extra-decision>

六、原理说明

该接口在需要调用的地方通过:Set<PassportProvider> providers = ExtraDecisionClassManager.getInstance().getArray(PassportProvider.MARK_STRING); 读取插件的申明。

前端通过dec.user.setting.authentications接口引入了扩展的认证方式,当用户选择并配置完成后,配置内容和对应的type会被一起传递到后端保存起来,通过PassportsBean.createPassportsBean(Map<OperationType, AbstractPassport> map)调用Passports.buildBean(String type) 先从内置的认证类型中匹配,如果匹配不到再读取插件中申明的扩展认证类型匹配。从而生效。

七、特殊限制说明

PassportProvider#passportType、PassportBean#markType、Passport#markType要跟前端 dec.user.setting.authentications#item的value一致

需要注意的是,这个接口不是用来做单点登录的(需要先区分登录和单点登录的差异)

使用改接口扩展认证方式后,同步用户或添加用户将不能同步或设置密码信息!

八、常用链接

demo地址:demo-passport-provider

(1)、三组常见引入JS和CSS的插件接口对比


九、开源案例

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

demo-custom-passport

demo-ldaps-passport

  • No labels