spring boot整合shiro引用配置文件配置是出现的问题
来源:互联网 发布:使命召唤 for mac 编辑:程序博客网 时间:2024/06/06 04:21
Spring boot 整合shiro 使用yml配置文件
最近自己玩一下springBoot配置 然后整合一下常用的框架,遇到一个问题。配置LifecycleBeanPostProcessorBean 的时候总是先于spring 读取yml文件。导致配置失败
@Bean(name = "shiroEhcacheManager")public EhCacheManager getEhCacheManager() { EhCacheManager em = new EhCacheManager(); em.setCacheManagerConfigFile(cacheManagerConfigFilePath); return em;}
Error initializing bean [shiroEhcacheManager]; nested exception is org.apache.shiro.cache.CacheException:
java.lang.NullPointerException
很显然报出了一个空指针的错误,也就是 cacheManagerConfigFilePath 的值没有初始化成功,我原先以为我的yml文件配置错误,
回去检查了没问题,
于是我开始一个一个Bean 进行初始化,下面是我整个config的配置@Configuration@ConfigurationProperties(prefix = "shiro")public class ShiroConfiguration { private String cacheManagerConfigFilePath; private String loginUrl; private String successUrl; private MapfilterChainDefinitionMap = new LinkedHashMap (); @Bean(name = "shiroRealm") public ShiroRealm getShiroRealm() { return new ShiroRealm(); } @Bean(name = "shiroEhcacheManager") public EhCacheManager getEhCacheManager() { EhCacheManager em = new EhCacheManager(); em.setCacheManagerConfigFile(cacheManagerConfigFilePath); return em; } @Bean(name = "lifecycleBeanPostProcessor") public static LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() { return new LifecycleBeanPostProcessor(); } @Bean public DefaultAdvisorAutoProxyCreator getDefaultAdvisorAutoProxyCreator() { DefaultAdvisorAutoProxyCreator daap = new DefaultAdvisorAutoProxyCreator(); daap.setProxyTargetClass(true); return daap; } @Bean(name = "securityManager") public DefaultWebSecurityManager getDefaultWebSecurityManager(AuthorizingRealm shiroRealm,EhCacheManager ehCacheManager) { DefaultWebSecurityManager dwsm = new DefaultWebSecurityManager(); dwsm.setRealm(shiroRealm); dwsm.setCacheManager(ehCacheManager); return dwsm; } @Bean public AuthorizationAttributeSourceAdvisor getAuthorizationAttributeSourceAdvisor(SecurityManager securityManager) { AuthorizationAttributeSourceAdvisor aasa = new AuthorizationAttributeSourceAdvisor(); aasa.setSecurityManager(securityManager); return new AuthorizationAttributeSourceAdvisor(); } @Bean(name = "shiroFilter") public ShiroFilterFactoryBean getShiroFilterFactoryBean(SecurityManager securityManager) { ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean .setSecurityManager(securityManager); shiroFilterFactoryBean.setLoginUrl(loginUrl); shiroFilterFactoryBean.setSuccessUrl(successUrl); //filterChainDefinitionMap.put("/sa/**", "authc"); //filterChainDefinitionMap.put("/**", "anon"); System.out.println(filterChainDefinitionMap); shiroFilterFactoryBean .setFilterChainDefinitionMap(filterChainDefinitionMap); return shiroFilterFactoryBean; } public String getCacheManagerConfigFilePath() { return cacheManagerConfigFilePath; } public void setCacheManagerConfigFilePath(String cacheManagerConfigFilePath) { this.cacheManagerConfigFilePath = cacheManagerConfigFilePath; } public String getLoginUrl() { return loginUrl; } public void setLoginUrl(String loginUrl) { this.loginUrl = loginUrl; } public String getSuccessUrl() { return successUrl; } public void setSuccessUrl(String successUrl) { this.successUrl = successUrl; } public Map getFilterChainDefinitionMap() { return filterChainDefinitionMap; } public void setFilterChainDefinitionMap(Map filterChainDefinitionMap) { this.filterChainDefinitionMap = filterChainDefinitionMap; }} 如果我注释掉shiroEhcacheManager 以下所有bean的创建,项目能启动,当我@Bean(name = "lifecycleBeanPostProcessor")创建这个bean的时候就抛出了上面的异常。这么分析过来问题应该出在这个bean上。百度了一下,LifecycleBeanPostProcessor用于在实现了Initializable接口的Shiro bean初始化时调用Initializable接口回调,在实现了Destroyable接口的Shiro bean销毁时调用 Destroyable接口回调。而我在创建的EhCacheManager 正是实现了Initializable接口,下面我截图了一张官方的在配置上面的说明大概意思就是 使用@Configuration配置,会会在上下文初始化的时候强制的注入一些依赖。导致一下不可知的初始化。尤其是创建BeanPostProcessor 和BeanFactoryPostProcessor的时候(LifecycleBeanPostProcessor正是BeanPostProcessor 的子类)。应该讲这些创建Bean的方法前面加上static。让使用configuration的类在没有实例化的时候不会去过早的要求@Autowired和@Value进行注入。最后解决问题很简单,只要在创建LifecycleBeanPostProcessor的方法变为静态static方法。其实我也没有彻底弄清楚出现这个问题的根本原因,如果有其他人知道的话,请指出来共同学习。
1 0
- spring boot整合shiro引用配置文件配置是出现的问题
- spring boot整合shiro
- spring boot shiro整合
- spring boot 整合shiro(一)
- spring boot shiro redis整合
- spring 整合mybatis 出现解析不了配置文件的问题
- spring boot 集成shiro的配置
- spring boot 集成shiro的配置
- Spring整合Shiro的开发环境配置
- spring boot整合redis,实现shiro的CacheManager
- spring boot整合redis实现shiro的分布式session共享
- 解决Spring MVC整合Shiro出现无法访问静态资源文件的问题
- 配置spring boot项目可能出现的问题
- Spring boot + shiro 跨域配置(解决jsessionid丢失问题)
- 面试问题spring boot自动配置是怎么实现的
- shiro 和spring 整合之shiro配置
- spring boot整合Shiro实现单点登录
- Spring boot 整合shiro 实现登陆验证
- 笔记
- Hibernate 基本创建
- PHP 验证码
- SQL语句--delete
- window bat脚本 变量操作
- spring boot整合shiro引用配置文件配置是出现的问题
- Linux学习笔记11
- 社会浮躁,太多女孩一副娼妓面孔
- Jackcard
- Nginx 源码阅读笔记4 启动流程
- 机器学习入门了解
- IOS Block研究
- Axure8.0 页面上下滑动效果实现
- Ubuntu设置系统时间与网络时间同步