今天因为业务需要,需要自定义多个realm(自行百度),当我把代码写好之后,发现在realm中@Autowire注入的bean都是null

在网上也百度了很久,各种解决方案,都没有效果,最后发现原来是

 @Bean(name = "lifecycleBeanPostProcessor")
 public static  LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
     return new LifecycleBeanPostProcessor();
 }

当你的代码添加了上面的,这个代码的具体作用不做详细解释,可百度,大概就是

LifecycleBeanPostProcessor将Initializable和Destroyable的实现类统一在其内部自动分别调用了Initializable.init()和Destroyable.destroy()方法,从而达到管理shiro bean生命周期的目的。

同时呢,当relam在spring中被解析为filter,filter会bean实例化,所以注入失败,大概是这个原因, 具体我也不清楚,有大神了解的可以留言告诉小弟。

废话不多说,说解决办法,上图

关于shiro自定义realm无法注入bean的问题

将LifecycleBeanPostProcessor提出来,单独作为一个配置类,然后在shiroConfig中修改为如下代码

关于shiro自定义realm无法注入bean的问题

同时别忘了将下面的代码注释了

/* @Bean(name = "lifecycleBeanPostProcessor")
 public static  LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
     return new LifecycleBeanPostProcessor();
 }*/

这样就完成了,但是具体到底什么原因,我也不清楚,希望大神告知。

 

 

相关文章:

  • 2021-09-22
  • 2022-02-24
  • 2022-12-23
  • 2021-10-30
  • 2021-11-02
  • 2021-04-09
  • 2021-10-09
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-01-14
  • 2018-11-01
  • 2021-07-04
  • 2021-06-13
相关资源
相似解决方案