DUBBO出错笔记(三)shiro 自定义realm注入失败解决办法

shiro 自定义realm注入失败解决办法
在与dubbo结合的项目中,在controller层会无论是使用dubbo的@refrence注解注入还是在xml中定义dubbo的service然后使用@autoware注入都是可以成功注入,但是在自定义realm中两种方式都无法注入,由于dubbo的注入原理没有弄明白,所以一开始解决这个办法就是自己配置bean然后使用spring的autoware注解注入,然而在debug过程中会发现对应的service也是null,
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
ISysUserService sysUserService = (ISysUserService) wac.getBean("sysUserService");

所以就想使用以上代码测试一下是否有这个bean,果然发现报错,没有name为sysUserService的bean,最后终于找出原因,原因大致如下:
在一个典型的Spring MVC项目中有两个“容器”:一个是由ContextLoaderListener创建的,另一个是由DispatchServlet创建的。Web应用程序可以定义任意数量的DispatcherServlet。每个servlet将在其自己的命名空间中操作,使用映射,处理程序等加载其自己的应用程序上下文。只有由ContextLoaderListener加载的根应用程序上下文(如果有)将被共享。因此可以具有任何数量的子容器。
这句话的意思就是ContextLoaderListener创建的是父级,dispatchServlet创建的是子级,只有父级的上下文可以被共享,而父级中是无法获取子级的上下文,而我的出错原因我个人猜测是由于shiro是定义在父级中的,而bean都定义在子级中了,导致注入不了,最后把配置文件调整好就可以注入了但是还无法使用dubbo的注解注入(原因还在探索中,先留下笔记)
附上参考链接:

http://stackoverflow.com/questions/3652090/difference-between-applicationcontext-xml-and-spring-servlet-xml-in-spring-frame

http://stackoverflow.com/questions/18578143/about-multiple-containers-in-spring-framework/18580299#18580299

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Dubbo Shiro是一种基于DubboShiro框架的权限管理解决方案。它可以帮助开发人员快速实现基于角色的访问控制和权限管理。下面是一个简单的演示: 1.在Dubbo服务提供者中配置Shiro过滤器链 ```java @Bean public FilterRegistrationBean<DelegatingFilterProxy> shiroFilter() { FilterRegistrationBean<DelegatingFilterProxy> filterRegistration = new FilterRegistrationBean<>(); filterRegistration.setFilter(new DelegatingFilterProxy("shiroFilter")); filterRegistration.addUrlPatterns("/*"); filterRegistration.setDispatcherTypes(DispatcherType.REQUEST, DispatcherType.FORWARD, DispatcherType.INCLUDE, DispatcherType.ERROR); return filterRegistration; } @Bean("shiroFilter") public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) { ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(securityManager); Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>(); filterChainDefinitionMap.put("/dubbo/**", "authc, roles[dubbo]"); filterChainDefinitionMap.put("/**", "anon"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap); return shiroFilterFactoryBean; } ``` 2.在Dubbo服务消费者中配置Shiro ```java @Bean public ReferenceBean<DemoService> demoService() { ReferenceBean<DemoService> referenceBean = new ReferenceBean<>(); referenceBean.setInterface(DemoService.class); referenceBean.setUrl("dubbo://localhost:20880"); referenceBean.setVersion("1.0.0"); referenceBean.setTimeout(5000); referenceBean.setRetries(3); referenceBean.setCluster("failover"); referenceBean.setLoadbalance("roundrobin"); referenceBean.setApplication(applicationConfig()); referenceBean.setRegistry(registryConfig()); referenceBean.setInterface(DemoService.class); referenceBean.setCheck(false); referenceBean.setFilter("shiro"); return referenceBean; } ``` 3.在Shiro配置文件中配置权限 ```ini [users] admin=admin,admin guest=guest,guest [roles] dubbo=guest ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值