Mybatis-plus 多租户 实现游客模式时 RequestContextHolder.getRequestAttributes() 获取 header 商户id

先来看一下正常的 Mybatis-plus 多租户 获取 租户id

	@Override
    public Expression getTenantId() {
        User user = UserUtils.getUser();
        return new StringValue(user.getCorp().getId());
    }

因为游客没有登录的 token, 所以, 我们需要通过请求头(header) 或者请求参数 进行租户id 的传递
在springboot 中, 我们可以使用 RequestContextHolder.getRequestAttributes() 来获取request信息

public static String getCorpId() {
        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        Assert.notNull(servletRequestAttributes, "header 获取异常");
        // 获取请求头中的商户id
        String corpId = servletRequestAttributes.getRequest().getHeader("corpId");
        // 获取请求参数中的商户id
        // String corpId = request.getParameter("corpId");
		Assert.notNull(corpId, "商户信息获取失败, 请切换商户");
        return corpId;
}

拿到了租户id
我们修改 getTenantId() 如下

	@Override
    public Expression getTenantId() {
        User user = UserUtils.getUser();
        if (Objects.isNull(user) || user.getCorpId() == null) {
            String corpId = getCorpId();
            return new StringValue(corpId);
        } else {
            return new StringValue(user.getCorpId().getId());
        }
    }

需要注意的是:

  • RequestContextHolder.getRequestAttributes() 不适用于多线程中, 如果需要 请以参数形式传递, 否则可能出现获取不到信息的情况
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值