Spring boot 整合 shiro 出現 org.apache.shiro.UnavailableSecurityManagerException: 錯誤


最開始參考的是這個 文檔 但是並沒有解決我的問題,因為他的配置和我的是一樣(差不多)的

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;
    }


 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM