Shiro整合Springboot和redis,jwt过程中的错误shiroFilterChainDefinition问题

 更新时间:2024年04月22日 08:34:13   作者:文戌  
这篇文章主要介绍了Shiro整合Springboot和redis,jwt过程中的错误shiroFilterChainDefinition问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Shiro整合Springboot和redis,jwt过程错误shiroFilterChainDefinition

在Shiro整合Springboot和redis,jwt过程中,编写完成ShiroConfig之后启动项目报错

Description:

Field shiroFilterChainDefinition in org.apache.shiro.spring.web.config.AbstractShiroWebFilterConfiguration required a bean of type 'org.apache.shiro.spring.web.config.ShiroFilterChainDefinition' that could not be found.

The injection point has the following annotations:
    - @org.springframework.beans.factory.annotation.Autowired(required=true)

Action:

Consider defining a bean of type 'org.apache.shiro.spring.web.config.ShiroFilterChainDefinition' in your configuration.

原因

使用了如下依赖之后,自定义的Realm竟然和authorizer冲突了

        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring-boot-web-starter</artifactId>
            <version>1.4.0-RC2</version>
        </dependency>
        或者
        <dependency>
            <groupId>org.crazycake</groupId>
            <artifactId>shiro-redis-spring-boot-starter</artifactId>
            <version>3.2.1</version>
        </dependency>

解决方法

在ShiroConfig文件中的getShiroFilterFactoryBean方法上加注解@Bean(“shiroFilterFactoryBean”)

@Bean("shiroFilterFactoryBean")
    public ShiroFilterFactoryBean getShiroFilterFactoryBean(DefaultWebSecurityManager defaultWebSecurityManager){
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager);

        Map<String,String> map = new HashMap<>();
        map.put("/user/login","anon");
        map.put("/**", "authc");
        shiroFilterFactoryBean.setFilterChainDefinitionMap(map);

        return shiroFilterFactoryBean;
    }

如果无法解决,则在ShiroConfig中单独写一个ShiroFilterChainDefinition的bean

@Bean("shiroFilterFactoryBean")
    public ShiroFilterFactoryBean getShiroFilterFactoryBean(DefaultWebSecurityManager defaultWebSecurityManager,ShiroFilterChainDefinition shiroFilterChainDefinition){
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
        shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager);

        // 添加自己的过滤器并且取名为jwt
        Map<String, Filter> filters  = new HashMap<>();
        //设置我们自定义的JWT过滤器
        filters .put("jwt", new JwtFilter());
        shiroFilterFactoryBean.setFilters(filters );
        shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager);

        Map<String, String> filterMap = shiroFilterChainDefinition.getFilterChainMap();
        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap);

        return shiroFilterFactoryBean;
    }

    @Bean
    public ShiroFilterChainDefinition shiroFilterChainDefinition() {
        DefaultShiroFilterChainDefinition chainDefinition = new DefaultShiroFilterChainDefinition();
        Map<String, String> filterMap = new LinkedHashMap<>();
        filterMap.put("/**", "jwt"); // 主要通过注解方式校验权限
        chainDefinition.addPathDefinitions(filterMap);
        return chainDefinition;
    }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java由浅入深带你了解什么是包package

    Java由浅入深带你了解什么是包package

    为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间,一个包(package)可以定义为一组相互联系的类型(类、接口、枚举和注释),为这些类型提供访问保护和命名空间管理的功能
    2022-03-03
  • Java中的CompletableFuture异步编程详解

    Java中的CompletableFuture异步编程详解

    这篇文章主要介绍了Java中的CompletableFuture异步编程详解,只要提到多线程来优化性能,那么必定离不开异步化,异步化的出现才是多线程优化性能这个核心方案的基础,需要的朋友可以参考下
    2023-12-12
  • Maven配置项目依赖使用本地仓库的方法汇总(小结)

    Maven配置项目依赖使用本地仓库的方法汇总(小结)

    这篇文章主要介绍了Maven配置项目依赖使用本地仓库的方法汇总(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 一篇文章带你了解Java SpringBoot四大核心组件

    一篇文章带你了解Java SpringBoot四大核心组件

    这篇文章主要介绍了SpringBoot四大核心组件的使用小结,详细的介绍了这方面的知识,有兴趣的可以了解一下,希望能够给你带来帮助
    2021-09-09
  • arthas jprofiler做复杂链路的调用分析

    arthas jprofiler做复杂链路的调用分析

    这篇文章主要为大家介绍了arthas jprofiler做复杂链路的调用分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • SpringCloud Stream 整合RabbitMQ的基本步骤

    SpringCloud Stream 整合RabbitMQ的基本步骤

    这篇文章主要介绍了SpringCloud Stream 整合RabbitMQ的基本步骤,从项目介绍到生产者结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • 详解Java包装类及自动装箱拆箱

    详解Java包装类及自动装箱拆箱

    这篇文章主要介绍了Java包装类及自动装箱拆箱,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • Java解析XML的四种方式

    Java解析XML的四种方式

    本文详细讲解了Java解析XML的四种方式,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • java编写贪吃蛇小游戏

    java编写贪吃蛇小游戏

    贪吃蛇是经典手机游戏,既简单又耐玩。通过控制蛇头方向吃蛋,使得蛇变长,从而获得积分。今天我们就来用java来实现下贪吃蛇小游戏,有需要的小伙伴可以参考下
    2015-03-03
  • SpringBoot使用@PathVariable进行数据校验的流程步骤

    SpringBoot使用@PathVariable进行数据校验的流程步骤

    在SpringBoot项目中,我们经常需要从 URL 中获取参数并进行相关的数据校验,而@PathVariable注解就是一种非常方便的方式,可以让我们在方法参数中直接获取URL中的参数,并进行数据校验,本文将介绍如何使用@PathVariable注解进行数据校验
    2023-06-06

最新评论