blade-starter-log V2.8.0 存在一个处理问题 tenantID在获取不到的情况下并未处理为 “000000”

Blade 未结 1 1014
AdamCoder
AdamCoder 剑圣 2021-08-03 09:38

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

  1. blade-starter-log 中 LogAbstractUtil 的 addRequestInfoToLog 方法这里是无效的,由于在未登录的情况下,AuthUtil的getTenantId 会为空字符串,并不会变成"000000",在这种情况下,如果做blade-log的分库存储并开启全局租户增强的情况下,会导致blade-log 报错

image.png

image.png

2. blade 配置

tenant:

#多租户增强

enhancetrue

#多租户授权保护

licensefalse

#动态数据源功能

dynamic-datasourcetrue

#动态数据源全局扫描

dynamic-globaltrue

#多租户字段名

columntenant_id

3.  blade-log 报错信息


2021-07-31 16:57:21.796 ERROR 33380 --- [ XNIO-1 task-72] o.s.c.l.e.BladeRestExceptionTranslator   : 服务器异常



org.springblade.core.tenant.exception.TenantDataSourceExceptionIncorrect result sizeexpected 1, actual 0


又细细琢磨了一下,找到原来是这里报的错,但是我已经开启了 NonDS为啥还是会去找一下tenantId 呢? 登录这个接口是没有tenantId的,当然会出错

image.png

也同样指定的数据库

image.png

目前我找到的解法是,单独给blade-log下方一个配置(blade-log.yaml)中设置不启用租户


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

正确的保存登录日志

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

bladeX 2.8.0

blade-log 2.8.0

bladex-boot cloud 2.8.0


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


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


1条回答
  • 2021-08-03 18:54

    换用toStrWithEmpty方法,这样可以判断到空字符串的情况,然后给他设置默认租户

    image.png



    多租户数据源切换有两个逻辑,一个是注解切换,用的就是@DS来指定。另一个是全局切换,自动匹配,如果要排除用的是@NonDS。

    你两个都用了,则两套逻辑都会执行,所以在DS的逻辑内是会判断租户ID的

    作者追问:2021-08-04 10:35

    那这里的意思是,如果使用的@NonDs取消了多租户数据,就只能使用master数据源(或者说是指定的默认数据源),没法使用@DS来切换数据库了,是么?

    作者追问:2021-08-05 17:37

    image.png

    我尝试找了一下原因是因为这个 TenantDataSourceAnnotationInterceptor 继承了 DynamicDataSourceAnnotationInterceptor 方法

    然后一定重写了数据源... 这个就坑大发了


    0 讨论(0)
提交回复