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 Web使用POI导出Excel的方法详解

    Java Web使用POI导出Excel的方法详解

    这篇文章主要介绍了Java Web使用POI导出Excel的方法,结合实例形式详细分析了Java Web使用POI导出Excel的具体操作步骤、实现技巧与相关注意事项,需要的朋友可以参考下
    2017-06-06
  • spring的xml方式配置bean全过程

    spring的xml方式配置bean全过程

    文章介绍了Spring框架中配置bean的四种情况:无参构造方法、有参构造方法、Setter方法和实现InitializingBean接口,还提到了IOC控制反转、DI依赖注入和AOP面向切面编程是Spring的三大特性
    2026-03-03
  • Java基于IO流实现登录和注册功能

    Java基于IO流实现登录和注册功能

    这篇文章主要为大家详细介绍了Java基于IO流实现登录和注册功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Java上传文件到服务器端的方法

    Java上传文件到服务器端的方法

    这篇文章主要为大家详细介绍了Java上传文件到服务器端的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • java CompletableFuture异步任务编排示例详解

    java CompletableFuture异步任务编排示例详解

    这篇文章主要为大家介绍了java CompletableFuture异步任务编排示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 实例分析java中重载与重写的区别

    实例分析java中重载与重写的区别

    这篇文章主要介绍了实例分析java中重载与重写的区别,需要的朋友可以参考下
    2014-07-07
  • springboot如何通过@PropertySource加载自定义yml文件

    springboot如何通过@PropertySource加载自定义yml文件

    这篇文章主要介绍了springboot如何通过@PropertySource加载自定义yml文件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • SpringDataJPA详解增删改查操作方法

    SpringDataJPA详解增删改查操作方法

    这篇文章主要介绍了SpringDataJpa增删改查操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Java编程基本概念

    Java编程基本概念

    本文主要介绍了Java编程的基本概念,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • 详解JAVA中的OPTIONAL

    详解JAVA中的OPTIONAL

    从Java 8引入的一个很有趣的特性是Optional类。Optional类主要解决的问题是臭名昭著的空指针异常(NullPointerException)
    2021-06-06

最新评论