这个问题真的折磨我很久,在网上找了很多方法都解决不了
重新写了几个shiro相关的拦截器,也添加了@Component注解,按理说spring boot启动是bean应该会被注册到容器,可偏偏报空指针异常,开始我以为是没有扫描到,又在启动类添加@ComponentScan扫描真个包路径,还是为null,我还以为是spring boot启动时没有出示化那几个过滤器,但我测试了其他加了@Component的类是有被实例化的。
幸好看见了这一篇https://www.cnblogs.com/matd/p/11128179.html,我是把Shiro生命周期处理器也写在了ShiroConfig配置类。
//Shiro生命周期处理器
@Bean("lifecycleBeanPostProcessor")
public LifecycleBeanPostProcessor injectBeanPostProcessor(){
return new LifecycleBeanPostProcessor();
}
如果这个配置出现在类中,那么该类的autowired都会失效。解决办法:那就分开来写!!!
shiro生命周期配置类
shiro主配置类,加上@AutoConfigureAfter(AppConfig.class)
关于这个类的描述
1.LifecycleBeanPostProcessor用于在实现了Initializable接口的Shiro bean初始化时调用Initializable接口回调,在实现了Destroyable接口的Shiro bean销毁时调用 Destroyable接口回调。如UserRealm就实现了Initializable,而DefaultSecurityManager实现了Destroyable。具体可以查看它们的继承关系。
2.保证实现了Shiro内部lifecycle函数的bean执行