@TenantIgnore注解不生效

Blade 未结 3 1105
fanglh
fanglh 剑宗 2024-01-10 15:20

岗位分页查询接口,数据表支持租户隔离,并且已经验证成功。截图如下: image.png

针对该分页接口,直接加上@TenantIgnore注解,如下图,发现再次调用还是追加了租户过滤。说明注解不生效,是什么原因呢???

image.png

image.png

3条回答
  • 2024-01-10 21:00
    @Slf4j
    @Aspect
    public class BladeTenantAspect {
    @Around("@annotation(tenantIgnore)")
    public Object around(ProceedingJoinPoint point, TenantIgnore tenantIgnore) throws Throwable {
    try {
    //开启忽略
    BladeTenantHolder.setIgnore(Boolean.TRUE);
    //执行方法
    return point.proceed();
    finally {
    //关闭忽略
    BladeTenantHolder.clear();
    }
    }
    }

    方法嵌套时会在执行第一个mapper方法后执行下面这个方法(可自行debug查看源码实现)

    BladeTenantHolder.clear()
     案例:
          @TenantIgnore
    m1(){
    m2();
    m3();
    }
    m2(){
    m2Mapper.selectOne();
    }
    m3(){
    m3Mapper.selectOne();
    }

    导致:ignore忽略租户标识清除,后面的mapper方法取不到ignore标识,执行mybatisplus方法时拼接tenant_id。

    建议改造方案(仅供参考):

    @Around("@annotation(tenantIgnore)")
    public Object around(ProceedingJoinPoint point, TenantIgnore tenantIgnore) throws Throwable {
    Boolean ignore = BladeTenantHolder.isIgnore();
    if (ignore){
    return point.proceed();
    }
    try {
    //开启忽略
    BladeTenantHolder.setIgnore(Boolean.TRUE);
    //执行方法
    return point.proceed();
    finally {
    //关闭忽略
    BladeTenantHolder.clear();
    }
    }


    1 讨论(0)
  • 2024-01-10 15:36

    你好,请将账号绑定邮箱改为授权qq邮箱方可进行商业版答疑。这个问题是你注解方法上加错了,要加到list方法不是page方法。前端调用的是list,你给page自然是没反应的。

    0 讨论(2)
  • 2024-01-10 16:49

    公司购买的,我只有一个购买截图。image.png

    作者追问:2024-01-10 16:51

    就拿这个2开头的qq邮箱绑定你这个账号。或者用这个授权账号注册社区再提问,或者让这个授权邮箱给我们发邮件,说明你的帐号是公司员工持有,这样我们就会把你标记成商业账号了。

    我们的邮箱:bladejava@qq.com

    0 讨论(0)
代码语言
提交回复