zoukankan      html  css  js  c++  java
  • 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;
        }


  • 相关阅读:
    Mongodb
    Java原子类
    volatile
    uniapp输入空格
    看不见的的html
    小程序隐藏scroll-view滚动条的方法
    云函数调用云函数 openid不存在
    vue路由中 Navigating to current location ("/xxx") is not allowed
    Vue: 单页面应用如何保持登录状态
    letter-spacing
  • 原文地址:https://www.cnblogs.com/zhangzhonghui/p/11648762.html
Copyright © 2011-2022 走看看