解决Spring boot整合shiro无法获取yml自定义属性问题

背景

最近使用SpringBoot整合shrio时,针对于一些配置,例如:超时、密码重试次数等配置,需要单独配置在yml中,方便部署时变更。

但是却遇到获取不到yml中自定义属性问题,一直显示null。

经过测试发现在配置了LifecycleBeanPostProcessorBean的时候,shiro的配置总是优先于spring boot获取yml步骤前,因此shiro中如果有用到yml中的配置,一直是获取不到的。

解决方法

LifecycleBeanPostProcessor作用于在实现了Initializable接口的Shiro bean初始化时调用Initializable接口回调,在实现了Destroyable接口的 Shiro bean 销毁时调用 Destroyable接口回调。

https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#spring-core中有一个解释如下:

image.png

image.png

LifecycleBeanPostProcessorBeanPostProcessor的子类,参照上面的说法,应该将其设置为static方法获取Bean。
这样不会触发配置类的初始化,如果配置类过早初始化,则@Autowired与@Value会无效!

因此解决办法就是将获取LifecycleBeanPostProcessor这个bean的方法设置为static!
接下来,就可以正常的在@Configuration类中使用@Autowired注解了。
自定义yml属性顺利注入!

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容