dubbo的rpc调用feign报错

Blade 已结 1 492
gtfhao
gtfhao 剑尊 2023-04-18 13:56

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

1. 项目集成了dubbo, 服务调用dubbo的rpc,  rpc又调用了数据权限的feign

2. 然后就报错了,错误日志如下

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

期待结果: dubbo可以正常调用feign

实际结果: dubbo调用feign异常

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

bladex3.1.0  企业版  Oracle linux 8.5, dubbo版本2.7.22

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

java.lang.RuntimeException: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 

### Error querying database.  Cause: java.lang.NullPointerException

### Cause: java.lang.NullPointerException

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 

### Error querying database.  Cause: java.lang.NullPointerException

### Cause: java.lang.NullPointerException

at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:96)

at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)

... 54 more

Caused by: java.lang.NullPointerException

at org.springblade.system.cache.DataScopeCache.getDataScopeByMapper(DataScopeCache.java:64)

at org.springblade.system.handler.DataScopeModelHandler.getDataScopeByMapper(DataScopeModelHandler.java:41)

at org.springblade.core.datascope.handler.BladeDataScopeHandler.sqlCondition(BladeDataScopeHandler.java:50)

at org.springblade.core.datascope.interceptor.DataScopeInterceptor.intercept(DataScopeInterceptor.java:107)

at org.springblade.core.mp.plugins.QueryInterceptorExecutor.exec(QueryInterceptorExecutor.java:48)

at org.springblade.core.mp.plugins.BladePaginationInterceptor.willDoQuery(BladePaginationInterceptor.java:45)

at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:75)

at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)

at com.sun.proxy.$Proxy321.query(Unknown Source)

at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)

... 61 more


五、问题已解决: rpc请求时缺少http的header, 写个dubbo过滤器, 把header传递过去即可。

1条回答
  •  zhx1994
    zhx1994 (最佳回答者)
    2023-04-18 15:13

    框架的数据权限拦截器不支持dubbo的,可以参考这个方法写一个过滤器:org.springblade.core.datascope.interceptor.DataScopeInterceptor#intercept

    作者追问:2023-04-18 15:13

    不仅仅是数据权限问题, dubbo直接调用其他feign也是报错

    0 讨论(2)
提交回复