springboot整合dubbo、shiro 无.xml配置文件在自定义的ShrioRealm中无法注入dubbo服务,全网各种找资料发现除了增加一个dubbo配置文件,别的都不行,本人一点一点的排查可能出现的问题,最终解决,在此作为记录,希望能为再碰到此坑的人提供一点小小的帮助。
springboot整合dubbo、shiro 无.xml配置文件,在只有springboot和dubbo没有碰到问题,dubbo服务可以正常注入。
dubbo配置类代码:
DubboSupport部分代码:
- @Component
- public class DubboSupport {
-
- @Reference(interfaceName = "com.vocedu.api.sys.AccountService")
- public AccountService accountService;
-
- @Reference(interfaceName = "com.vocedu.api.sys.AuthOauthClientService")
- public AuthOauthClientService authOauthClientService;
- }
但是当整合shiro时自定义的shiroRealm通过
- @Autowired
- private DubboSupport dubboSupport;
调用服务一直报空。纠结了好久,网上查各种资料最靠谱的说是整合shiro时不能用@Reference注解而要把自定义的shiroRealm中需要用到的服务使用dubbo的.xml配置
此种方法亲测确实可行。但是本人就是感觉别扭这样违背了springboot零配置文件的原则,于是不达目的不罢休,亲自研究。
把ShiorConfiguration配置类修改一下,先注入DubboSupport然后传入到ShiroRealm中
- @Configuration
- public class ShiroConfiguration {
-
- @Bean
- public static DubboSupport getDubboSupport() {
- DubboSupport dubboSupport = new DubboSupport();
- return dubboSupport;
- }
-
-
- @Bean
- public ShiroRealm shiroRealm() {
- ShiroRealm shiroRealm = new ShiroRealm(getDubboSupport());
- return shiroRealm;
- }
- ………………………………………………………………
- ……………………………………………………
- }
此时,DubboSupport中修改为:
-
- public class DubboSupport {
-
- @Reference(interfaceName = "com.vocedu.api.sys.AccountService")
- public static AccountService accountService;
-
- @Reference(interfaceName = "com.vocedu.api.sys.AuthOauthClientService")
- public static AuthOauthClientService authOauthClientService;
- ………………………………
- ………………
- }
ShiroRealm做一下修改
- public class ShiroRealm extends AuthorizingRealm{
-
-
- private DubboSupport dubboSupport;
-
- public ShiroRealm(DubboSupport dubboSupport) {
- this.dubboSupport = dubboSupport;
- }
- …………………………
- …………………………
- }
最终启动项目,成功了