今天因为业务需要,需要自定义多个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,bean实例化会在filter之后,所以注入失败,大概是这个原因, 具体我也不清楚,有大神了解的可以留言告诉小弟。
废话不多说,说解决办法,上图
将LifecycleBeanPostProcessor提出来,单独作为一个配置类,然后在shiroConfig中修改为如下代码
同时别忘了将下面的代码注释了
/* @Bean(name = "lifecycleBeanPostProcessor")
public static LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
return new LifecycleBeanPostProcessor();
}*/
这样就完成了,但是具体到底什么原因,我也不清楚,希望大神告知。