最开始参考的是这个 文档 但是并没有解决我的问题,因为他的配置和我的是一样(差不多)的
https://www.cnblogs.com/ginponson/p/6217057.html
然后看到此篇博客
https://bbs.csdn.net/topics/391924615
<!-- 相当于调用SecurityUtils.setSecurityManager(securityManager) --> <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> <property name="staticMethod" value="org.apache.shiro.SecurityUtils.setSecurityManager" /> <property name="arguments" ref="securityManager" /> </bean>
https://www.cnblogs.com/kibana/p/8953566.html 这篇讲述了 如何配置 MethodInvokingFactoryBean
以下是我的配置
//主要是这个,但是需要用到 getSecurityManager 所有就贴出来
@Bean public MethodInvokingFactoryBean getMethodInvokingFactoryBean() { MethodInvokingFactoryBean methodInvokingFactoryBean=new MethodInvokingFactoryBean(); methodInvokingFactoryBean.setStaticMethod("org.apache.shiro.SecurityUtils.setSecurityManager"); methodInvokingFactoryBean.setArguments(getSecurityManager()); return methodInvokingFactoryBean; } /** * 创建 DefaultWebSecurityManager * 需要关联一个Realm * @Qualifier 获取指定的Bean * @return */ @Bean(name = "webSecurityManager") public SecurityManager getSecurityManager(){ DefaultWebSecurityManager webSecurityManager=new DefaultWebSecurityManager(); /** * 配置缓存测量 */ //配置redis缓存策略 RedisCacheManager redisCacheManager = shiroRedisCache().getCacheManager(); webSecurityManager.setCacheManager(redisCacheManager); //配置 session 管理 SessionManager sessionManager =shiroSessionCache(redisCacheManager).sessionManager(); webSecurityManager.setSessionManager(sessionManager); /** * 关联多个Realm */ Collection<Realm> realms =new ArrayList<>(); // realms.add(realmExtension().getJwtRealm()); realms.add(realmExtension().getUserRealm(doorwayService)); webSecurityManager.setRealms(realms); Collection<SessionListener> listeners = new ArrayList<>(); return webSecurityManager; }
Spring boot 整合 shiro 出现 org.apache.shiro.UnavailableSecurityManagerException: 错误
原文:https://www.cnblogs.com/zhangzhonghui/p/11648762.html