
# 用户自定义租户id获取接口
多租模型的配置主要分为两种：
- 验证方式为Token
- 验证方式为Header
下面分别介绍这两种方式的使用方法。
#### 租户验证方式为Token
1. 登录[AstroPro控制台](https://console.huaweicloud.com/astro-pro/?agencyId=dWjZiBgRMHefcJqMoL3bWlQAgEiGHcpQ/home)，单击"进入首页"，进入AstroPro实例。
2. 在左侧导航栏中，选择"后端开发平台 \> 服务管理 \> 服务"。
3. 在服务列表中，单击待操作服务后的"编辑"。
4. 单击顶部流程导航栏的"生成策略"，进入生成策略页面。 
   设置租户配置：
   - "多租模型"选择"TENANT"。
   
   - "租户验证方式"选择"Token"。
     图1开启多租模型   
     ![](https://support.huaweicloud.com/devg-astropro/zh-cn_image_0000002193239418.png "点击放大") 
   
   
   
   
5. 单击顶部流程导航栏的"业务设计"，进入业务设计页面。 
   选中需要进行资源隔离的对象，在属性面板中勾选"支持BO多租"，如[图2]所示：
   图2设置BO多租   
   ![](https://support.huaweicloud.com/devg-astropro/zh-cn_image_0000002228503525.png "点击放大")
   
   
6. 设置完成后，单击"下一步"。
7. 输入变更日志描述信息，单击"创建"。 
   系统开始创建服务，最终生成的服务结构如[图3]所示。
   图3生成服务   
   ![](https://support.huaweicloud.com/devg-astropro/zh-cn_image_0000002193060334.png "点击放大")
   此方式下生成的代码会在utils目录中生成TenantIdFilter和TenantIdWebMvcHandler两个类。
   - TenantIdFilter：用于将租户信息设置到线程变量中的过滤器。
   
   - TenantIdWebMvcHandler： 提供给用户实现的SPI，用来获取租户信息。具体内容如下：
     ```
     public interface TenantIdWebMvcHandler {
         String getTenantId(HttpServletRequest request);
     }
     ```
     
   
   
   
   
8. 手动实现TenantIdWebMvcHandler接口，覆写getTenantId方法来获取租户信息。 
   示例：
   ```
   public class CustomTenantIdHandler implements TenantIdWebMvcHandler {
       /**
        * 示例只是简单获取租户信息，用户需要根据自己的需要去实现该方法
        * 
        * @param request
        * @return
        */
       @Override
       public String getTenantId(HttpServletRequest request) {
           return (String) request.getAttribute("tenantId");
       }
   }
   ```
   
   
9. 配置SPI（在resource/META-INF/services目录中新建文件，文件名为TenantIdWebMvcHandler全路径限定名，文件中内容为TenantIdWebMvcHandler接口实现类的全路径限定名）。 
   图4配置SPI   
   ![](https://support.huaweicloud.com/devg-astropro/zh-cn_image_0000002193068662.png "点击放大")
   
   
10. 在业务代码中添加tenant_id的校验逻辑（生成代码时会自动生成相关校验逻辑）。 
    完成上述步骤后，项目即可启动，此时资源将实现租户隔离。
    
    
 
#### 租户验证方式为Header
1. 登录[AstroPro控制台](https://console.huaweicloud.com/astro-pro/?agencyId=dWjZiBgRMHefcJqMoL3bWlQAgEiGHcpQ/home)，单击"进入首页"，进入AstroPro实例。
2. 在左侧导航栏中，选择"后端开发平台 \> 服务管理 \> 服务"。
3. 在服务列表中，单击待操作服务后的"编辑"。
4. 单击顶部流程导航栏的"生成策略"，进入生成策略页面。 
   设置租户配置：
   - "多租模型"选择"TENANT"。
   
   - "租户验证方式"选择"Header"。
     图5开启多租模型   
     ![](https://support.huaweicloud.com/devg-astropro/zh-cn_image_0000002193069530.png "点击放大") 
   
   
   
   
5. 单击顶部流程导航栏的"业务设计"，进入业务设计页面。 
   选中需要进行资源隔离的对象，在属性面板中勾选"支持BO多租"，如[图6]所示：
   图6设置BO多租   
   ![](https://support.huaweicloud.com/devg-astropro/zh-cn_image_0000002193079794.png "点击放大")
   
   
6. 设置完成后，单击"下一步"。
7. 输入变更日志描述信息，单击"创建"。 
   系统开始创建服务，最终生成的服务结构如[图7]所示。
   图7生成服务   
   ![](https://support.huaweicloud.com/devg-astropro/zh-cn_image_0000002228390029.png "点击放大")
   此方式下生成的代码会在utils目录中生成TenantIdFilter和TenantIdWebMvcHandler两个类。
   获取用户租户信息的方式是从请求头中查找key为tenant_id的请求头（需要在请求接口的时候带上此请求头）。用户无需去实现TenantIdWebMvcHandler类。
   
   
8. 在业务代码中添加tenant_id的校验逻辑（生成代码时会自动生成相关校验逻辑）。 
   完成上述步骤后，项目即可启动，此时资源将实现租户隔离。
   
   
 
