自定义mybatis拦截器去掉框架拼接的tenantId,拦截器无法在BladeTenantSqlParser之后执行

Blade 未结 1 1563
zzdjhb
zzdjhb 剑圣 2020-12-24 18:38


一、该问题的重现步骤是什么?

         由于多租户增强功能只针对于新增和修改方法,现在的业务场景是许多查询sql需要手动设置tenantId,许多方法直接调用的是mybatis封装的BaseMapper,所以也无法使用@SqlParse注解跳过租户绑定,而且由于方法太多,重新在写sql也不太现实。因此想通过mybatis拦截器的方式实现手动拼接上正确的租户id并将框架自动拼接的租户id删除。

        最后的结果是看到自定义的拦截器在租户的sql解析类前边执行,对sql进行拦截处理tentantId的方法失效。检查源码发现,租户id拼接, blade框架使用的是jsqlParser,二者无法关联。

二、你期待的结果是什么?实际看到的又是什么?

    希望看到手写的拦截器BladeTenantSqlParser之后执行,

实际看到的是拦截器BladeTenantSqlParser之前执行,

image.png

手写的拦截器

image.png

三、你正在使用的是什么产品,什么版本?在什么操作系统上?

blade-cloud 商业版    windows

四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。

1条回答
  • 2020-12-25 11:38

    不需要新建拦截器,只要修改这个方法的逻辑就行

    protected void processPlainSelect(PlainSelect plainSelect) {}


    0 讨论(0)
提交回复