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确定要操作的租户。注解
默认情况下,不使用使用请求信息的租户自动解决功能。可以使用提供此功能的“ IM-SecureSignOn for Accel Platform ”应用程序或模块启用使用请求信息的租户自动解决功能。注解
有关如何使用请求信息实现租户自动解决功能的信息,请参阅“ 使用请求信息提供租户自动解决功能 ”。
11.8.2. 的租户溶液模式¶
Web访问期间解决租户的模式如下。
- 一般用户
- 登录时指定租户时
- 当使用带有请求信息的租户自动解决功能时
系统管理员
11.8.3. 要使用的请求信息提供租户自动解析功能¶
11.8.3.1. 概述¶
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 != 空值 && !tenantId。startsWith(“ 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列表 ,请参阅”。