一、该问题的重现步骤是什么?
1.调用物联网平台(升级成cloud版本)/device/detail接口(下图1),发现有dataScope为null的问题,试了下其他接口也存在这样的问题。DataScopeCache中打断点发现虽然执行了缓存put操作(下图2),但是redis中并没有塞入对应的值(下图3)。
二、你期待的结果是什么?实际看到的又是什么?
期待的结果:本地调试的时候,不报dataScope的错误。
实际看到的:本地调试的时候,有的接口会报dataScope的错误。
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
正在使用的产品:BladeX物联网平台
版本:1.2.0
操作系统:Windows11
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
已经修复了,在dev分支,可以先看下:https://center.javablade.com/blade/BladeX/commit/168173030f35f49776340f8e954378017d73bd4f
还有一个就是如果是cloud版本,需要引入blade-scope-api的依赖,可全局搜索一下,参考下已引入的工程
blade-core-secure,用4.3.0 ?
bladex新版本这几天就发了,可以留意下,发版后升级就解决了
好,谢谢!
调用client获取的datascope为null,应该是没有引入blade-scope-api的依赖,你再检查一下看看,如果引入了,调用不管成功与否都会返回类的,不会是一个null。如果返回的是null,说明触发feign熔断了。新版本解决的是缓存未put成功的问题。
调用的是物联网平台(升级成cloud版本)/device/detail接口(blade-server中的),blade-service的pom已经引用过了blade-scope-api依赖。是要在blade-server中再引用一次blade-scope-api?
如果blade-server引用后子服务就不需要引入了。你打个断点看看是哪里报错了,是在client报错的还是在fallback类报错的
打断点到这里因为dataScope为空,导致dataScope.getResourceCode()报错,
进这里调试
查到原因了,本地调试的时候,要把blade-system也要启动。。。之前以为本地用端口调试blade-server的服务,只开blade-server服务就够了。。。
如果blade-server服务链接的数据库和blade-system是一样的,那就不需要引入blade-scope-api的依赖,可以直接删掉。
删掉后会调用boot形式的数据权限逻辑,不走feign,这样效率更高。
如果你的blade-server是独立的一个iot数据库,没有系统表,那么就需要引入scope依赖,走feign的形式进行数据权限过滤
感谢提醒!
扫一扫访问 Blade技术社区 移动端