最開始參考的是這個 文檔 但是並沒有解決我的問題,因為他的配置和我的是一樣(差不多)的
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; }