intra-mart Accel Platform安装指南 第33版2020-09-01

11.8. 租户解析功能

11.8.1. 概述

本章介绍使用虚拟Tenant功能时如何解析要操作的租户。
intra-mart Accel Platform , 账号上下文的承租人ID属性表示要操作的承租人。
使用租户解析功能解析账号上下文的租户ID属性。
下面描述租户解析功能的规格。
请注意,在intra-mart Accel Platform上创建的程序无需知道要操作的租户。
(要操作的租户将通过页上说明的租户解决机制自动解决。)

11.8.1.1. 对于租户自动分辨功能使用请求信息

intra-mart Accel Platform ,可以使用请求信息来确定要操作的租户。
通过使用此功能,无论用户的身份验证状态如何,都将特定的租户指定为操作目标,并且在登录时无需指定租户ID。
例如,通过使用URL的子域自动解析租户,可以如下所示为每个URL确定要操作的租户。
../../../_images/resolve_tenant_for_url.png

注解

默认情况下,不使用使用请求信息的租户自动解决功能。
可以使用提供此功能的“ IM-SecureSignOn for Accel Platform ”应用程序或模块启用使用请求信息的租户自动解决功能。

注解

有关如何使用请求信息实现租户自动解决功能的信息,请参阅“ 使用请求信息提供租户自动解决功能 ”。

11.8.2. 的租户溶液模式

Web访问期间解决租户的模式如下。
  • 一般用户
    • 登录时指定租户时
    • 当使用带有请求信息的租户自动解决功能时
  • 系统管理员

11.8.2.1. 一般用户

11.8.2.1.1. 如果你指定在登录租客

如果有多个租户,请在一般用户的登录屏幕上指定租户并登录。

如果登录成功,则将登录屏幕上指定的租户指定为要操作的租户。
通过注销,状态将变为未认证状态,并且默认Tenant将切换到操作目标。
在未认证状态下, 默认Tenant被指定为要操作的租户。
../../../_images/normal_flow.png

11.8.2.1.2. 如果你使用的请求信息使用的租户自动解析功能

通过使用使用请求信息的租户自动解决功能,可以从请求的任何信息中解析租户。
使用此功能时,将不会通过登录/注销来切换要操作的租户,并且您无法通过在登录屏幕上指定租户来登录。
在未认证状态下,将已自动解决的租户指定为要操作的租户。
../../../_images/resolved_tenant_flow.png

11.8.2.2. 系统管理员

系统管理员将要操作的租户指定为默认Tenant 。
系统管理员可以使用租户切换功能来切换操作目标租户。 详细内容 ,请参阅《 系统管理员操作指南》中的“ 租户切换 ”。

11.8.3. 要使用的请求信息提供租户自动解析功能

11.8.3.1. 概述

当使用请求信息的自动租户解析功能有效时,将根据以下流程解析要操作的租户。
  1. 使用提供的租户自动解析功能来解析租户ID。
  2. 使用提供的租户验证功能验证租户ID。
  3. 在账号上下文的承租人ID属性中设置承租人ID。
下面介绍租户自动解决功能租户验证功能及其提供方法。

11.8.3.2. 租户自动解析功能

此功能从请求信息中解析租户ID。

通过创建实现RequestBasedTenantIdResolver接口的类并设置插件配置文件,可以使用带有请求信息的租户自动解决功能。

可以提供多个租户解析功能。
如果提供了多个租户解析功能,则根据插件规范,从最高优先级的租户解析功能开始按顺序执行它们。
租户解析后,租户解析处理结束 getTenantId(HttpServletRequest)方法中返回非null )。随后的租户解析功能将不会执行。
如果无法解析承租人(在getTenantId(HttpServletRequest)方法中返回null ),请在后续的承租人解析函数中解析承租人。
如果所有租户解析功能都无法解析租户(全部返回null ),那么在下一部分中的租户验证功能的验证中没有问题时,它将被解析为默认Tenant 。

11.8.3.2.1. 创建一个租户自动解析功能

创建一个实现以下接口的类。
  • jp.co.intra_mart.foundation.admin.tenant.context.RequestBasedTenantIdResolver
以下是使用Cookie解决租户的示例实现。
包装 sample.context;

进口 javax.servlet.http.Cookie;
进口 javax.servlet.http.HttpServletRequest;

进口 jp.co.intra_mart.foundation.admin.tenant.context.RequestBasedTenantIdResolver;

公开的  CookieTenantIdResolver 实施 RequestBasedTenantIdResolver {

    私人的 静态的 最后的 弦乐 COOKIE_KEY = “ X租户ID”;

    @Override
    公开的 弦乐 getTenantId最后的 HttpServletRequest 要求 {
        归还 getCookieValue要求 COOKIE_KEY);
    }

    私人的 饼干 getCookie最后的 HttpServletRequest 要求 最后的 弦乐  {
        最后的 饼干[] 饼干 = 要求getCookies();

        如果 饼干 == 空值 {
            归还 空值;
        }

         最后的 饼干 曲奇  饼干 {
            如果 等于曲奇getName())) {
                归还 曲奇;
            }
        }

        归还 空值;
    }

    私人的 弦乐 getCookieValue最后的 HttpServletRequest 要求 最后的 弦乐  {
        最后的 饼干 曲奇 = getCookie要求 );

        如果 曲奇 == 空值 {
            归还 空值;
        }

        归还 曲奇getValue();
    }

}

注解

接口RequestBasedTenantIdResolver 详细内容是“ 界面RequestBasedTenantIdResolver API列表 ,请参阅”。

11.8.3.2.2. 租户一套自动解析功能

租户自动解决功能在插件文件中设置。因此,可以使用插件的功能进行设置。
使用请求信息设置租户自动解决功能的扩展点是jp.co.intra_mart.foundation.admin.tenant.context.tenant.resolvers
创建的插件文件放在WEB-INF / plugin / sample_tenant_resolver / plugin.xml中 。 (可以直接更改插件下的文件夹名称,该名称不能与其他插件重复。)
使用上述Cookie来运行租户自动解决功能的插件设置示例如下。
<?xml版本=“ 1.0”编码=“ UTF-8”?>
<插件>
    <扩展名 点=“ jp.co.intra_mart.foundation.admin.tenant.context.tenant.resolvers”>
        <tenant-id-resolvers
            id =“ sample.context.cookie_resolver”
            版本=“ 1.0.0”
            等级=“ 1”>

            <!-可以指定多个tenant-id-resolver标签。 ->
            <!-在类属性中指定实现RequestBasedTenantIdResolver接口的类的完全限定类名。 ->
            <tenant-id-resolver 类=“ sample.context.CookieTenantIdResolver” />

        </ tenant-id-resolvers>
    </ extension>
</插件>

注解

请参阅“ PluginManager API列表 ”以获取插件设置规范。

部署上述材料时,将Cookie密钥X-TENANT- ID的值视为租户ID。

11.8.3.3. 租户验证功能

此功能确定由租户自动解析功能解析的租户ID是否为有效值。

如果由租户自动解决功能解析的租户ID不会在验证功能中引起错误,则将在账号上下文的租户ID属性中进行设置。例如,如果在账号上下文的租户ID属性中设置了不存在的租户ID,则intra-mart Accel Platform提供的功能将无法正常使用。为避免这种情况,请使用租户验证功能执行有效性检查。

可以通过设置多个来提供租户验证功能。
如果提供了多个租户验证功能,则根据插件规范,从最高优先级的租户验证功能开始按顺序执行它们。
当租户验证中发生错误( validate(字符串, 资源)方法中的InvalidTenantIdException )时,租户验证过程结束。随后的租户验证功能将不会执行。

11.8.3.3.1. 创建一个租户验证功能

创建一个实现以下接口的类。
  • jp.co.intra_mart.foundation.admin.tenant.context.TenantIdValidator
以下是示例实现。
包装 jp.co.intra_mart.foundation.admin.tenant;

进口 jp.co.intra_mart.foundation.admin.tenant.context.TenantIdValidator;
进口 jp.co.intra_mart.foundation.context.core.Resource;
进口 jp.co.intra_mart.foundation.admin.tenant.InvalidTenantIdException;

公开的  SampleTenantIdValidator 实施 TenantIdValidator {

    @Override
    公开的 虚空 验证最后的 弦乐 tenantId 最后的 资源资源 资源 抛出 InvalidTenantIdException {

        如果 tenantId != 空值 && tenantIdstartsWith“ TENANT_”)) {
            //检查房客ID格式
            //检查租户ID是否以“ TENANT_”开头。
             新的 InvalidTenantIdException“承租人ID的格式不正确。”);
        }

    }

}

注解

接口TenantIdValidator 详细内容是“ 界面TenantIdValidator API列表 ,请参阅”。

11.8.3.3.2. 租户验证功能的设置

租户验证功能也以与租户自动解析功能插件在插件配置文件插件 。
设置租户验证功能的扩展点是jp.co.intra_mart.foundation.admin.tenant.context.tenant.validators
以下是样本插件配置文件。
<?xml版本=“ 1.0”编码=“ UTF-8”?>
<插件>
    <扩展名 点=“ jp.co.intra_mart.foundation.admin.tenant.context.tenant.validators”>
        <tenant-id-validators
            id =“ sample.context.sample_tenant_id_validator”
            版本=“ 1.0.0”
            等级=“ 1”>

            <!-可以指定多个tenant-id-validator标签。 ->
            <!-在类属性中指定实现TenantIdValidator接口的类的完全限定类名。 ->
            <tenant-id-validator 类=“ sample.context.SampleTenantIdValidator” />

        </ tenant-id-validators>
    </ extension>
</插件>

11.8.3.3.3. StandardTenantIdValidator

作为标准提供的TenantIdValidator的实现类。
通过租户自动解析功能,租户存在检查等执行租户解析检查。
11.8.3.3.3.1. 满级预选赛
jp.co.intra_mart.system.admin.context.StandardTenantIdValidator
11.8.3.3.3.2. 插件的初始化参数
由于StandardTenantIdValidator实现了PropertyInitParamable接口,因此可以插件配置文件中传递初始化参数。
初始化参数在<init-param>标记中指定。
<?xml版本=“ 1.0”编码=“ UTF-8”?> <插件> <扩展 点= “ jp.co.intra_mart.foundation.admin.tenant.context.tenant.validators” > <tenant-id-validators id = “ jp.co.intra_mart.tenant_id.validator.standard” 版本= “ 8.0.7” 等级= “ 100” > <tenant-id-validator 类= “ jp.co.intra_mart.system.admin.context.StandardTenantIdValidator “ > <init-param> <param-name> required_tenant_id </ param-name> <param-value> true </ param-value> </ init-param> <init-param> <param-name> valid_tenant_id </ param-name> <param-value> true </ param-value> </ init-param> </ tenant-id-validator> </ tenant-id-validators> </ extension> </ plugin>
参数名 说明
required_tenant_id
验证租户ID已解决。使用true / false指定,如果为true ,则执行验证。
如果尚未解析承租人ID,则会发生异常InvalidTenantIdException ,并且无法访问系统。
如果省略,则不执行验证。
valid_tenant_id
验证解析的租户ID是否为现有租户的租户ID。使用true / false指定,如果为true ,则执行验证。
如果解析的承租人ID不是现有承租人的承租人ID,则会发生InvalidTenantIdException异常,并且无法访问系统。
如果省略,则不执行验证。

注解

接口PropertyInitParamable 详细内容是“ 界面PropertyInitParamable API列表 ,请参阅”。