@TenantIgnore注解不生效

Blade 未结 3 322
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)
提交回复