goupan
2024-04-03 5506e9a45e717ffcb67ec313b5a4e8206d9b3a39
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package cn.stylefeng.roses.kernel.system.modular.user.service;
 
import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.roses.kernel.auth.api.context.LoginContext;
import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser;
import cn.stylefeng.roses.kernel.rule.tenant.OnceTenantCodeHolder;
import cn.stylefeng.roses.kernel.rule.tenant.RequestTenantCodeHolder;
import cn.stylefeng.roses.kernel.rule.tenant.TenantPrefixApi;
import org.springframework.stereotype.Service;
 
/**
 * 获取当前登录用户的租户code
 *
 * @author fengshuonan
 * @date 2022/11/7 21:01
 */
@Service
public class TenantPrefixService implements TenantPrefixApi {
 
    @Override
    public String getTenantPrefix() {
 
        // 1. 优先从OnceTenantCodeHolder中获取租户缓存编码
        String tenantCode = OnceTenantCodeHolder.getTenantCode();
 
        // 如果有则以ThreadLocal中为准
        if (ObjectUtil.isNotEmpty(tenantCode)) {
            return tenantCode;
        }
 
        // 2. 次之,从RequestTenantCodeHolder中获取租户缓存编码,一般用在登录接口时,系统还没有LoginUser
        String requestHttpContextTenantCode = RequestTenantCodeHolder.getTenantCode();
        if (ObjectUtil.isNotEmpty(requestHttpContextTenantCode)) {
            return requestHttpContextTenantCode;
        }
 
        // 3. 最后,从LoginUser中获取租户编码
        LoginUser loginUser = LoginContext.me().getLoginUserNullable();
 
        if (loginUser == null) {
            return null;
        }
 
        return loginUser.getTenantCode();
    }
 
}