配置ShiroFilterFactoryBean过滤器数量时太多不生效的问题

在shiro配置中我们经常会配置系统中一些接口的访问权限,当我们超过12条访问权限的时候,后续的配置就会不生效,这时候我们需要处理,最核心的思想是过滤规则接收的map集合定义的时候不要使用HashMap,而是使用LinkedHashMap。
目前我们配置过滤规则有两种方式
第一种是将过滤规则定义在配置文件中,如下:

permission-config:
  perms:
    -   key: /---/----
        value: anon
    -   key: /---/----
        value: anon
    -   key: /---/----
        value: anon
    -   key: /---/----
        value: anon
    -   key: /---/----
        value: anon
    -   key: /----/-----
        value: anon
    -   key: /----/----
        value: anon
    -   key: /**
        value: jwt

这种配置的时候在动态配置注入的时候将获取配置文件中过滤规则的map定义为LinkedHashMap,如图所示第一行的map定义
在这里插入图片描述
第二种是我们将过滤规则定义在代码中,这时候的定义方式如下图所示
在这里插入图片描述

总结:其实如最开始所说,我们最核心的思想就是将所有的过滤规则放在LinkedHashMap中,而不是HashMap中,这样就能解决我们shiro过滤条件太多不生效的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以尝试以下步骤: 1 确认是否已经在pom.xml文件添加了shiro-spring-boot-starter依赖,如果没有,需要添加该依赖。 2. 确认ShiroFilterFactoryBean是否已经被正确配置。可以在application.yml文件或者application.properties文件添加以下配置: ``` shiro: filter: anon: /login/** authc: /* loginUrl: /login successUrl: / unauthorizedUrl: /401 ``` 这里的配置表示:/login/** 路径下的请求可以匿名访问,而其他路径的请求都需要进行身份验证。在进行身份验证的时候,如果用户未登录,则会跳转到/login页面,如果验证失败,则会跳转到/401页面。 3. 确认是否已经在配置添加了ShiroFilterFactoryBean。例如: ``` @Bean public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) { ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(securityManager); Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>(); filterChainDefinitionMap.put("/logout", "logout"); filterChainDefinitionMap.put("/static/**", "anon"); filterChainDefinitionMap.put("/login", "anon"); filterChainDefinitionMap.put("/**", "authc"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap); return shiroFilterFactoryBean; } ``` 这里的配置表示:/logout路径下的请求会进行注销操作,/static/** 路径下的请求可以匿名访问,/login路径下的请求也可以匿名访问,而其他路径的请求都需要进行身份验证。 如果以上步骤都已经确认无误,那么可以尝试重新编译运行程序,看看是否能够生效。如果还有问题,可以提供更多的具体信息,例如错误日志等,以便进行排查。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值