shiro的anon失效问题

shiro的anon失效问题

前面可能会记我的一些废话,等不及的小伙伴可以直接跳到 3.最终解决

1.前情提要(发现问题)

记一次shiro出现nano失效问题,出现原因是我在过滤链中新增了不需要验证的的路劲,好家伙没有任何效果,该报401的照样报401,更有甚者,我原本的登录也变成401被拦截下来验证的,整一个就是vip通道被关,都老老实实去走普通通道。

配置了但失效

在这里插入图片描述

在这里插入图片描述

甚至login也失效了

在这里插入图片描述

原本是能成功的(不新增规则之前)

在这里插入图片描述

2.解决问题

那要怎么办呢?【把新增的逻辑删掉,不新增这个功能了,这样谁都不知道我出bug-了–》当然这只是开个玩笑,该加的还是要加,(比如说我,这注册要是没法实现,那有登录什么事)】

2.1 debug

通过debug发现咱的登录请求确实被拦截了,需要通过我自定义的过滤规则进行认证,【好家伙我整个人就裂开了,咋了anon是被吃了吗】。

在这里插入图片描述

2.2 回去看我们的过滤链

发现也没**‘写错’**啊,anon的都写在myShiro(这个是我自定义的过滤器)之前,(熟悉的小伙伴可能这时候已经发现问题所在了,但那时的我裂开了,满脑子只看得到我写了anon了)

在这里插入图片描述

2.3 接着查资料,思考,debug

终于让我逮到了错误的小尾巴

上面我们也有提到anon(无需认证即可访问)必须写在所有需要认证的规则之前,比如本案例中的“myShiro”。那么这个之前是怎么个之前法呢?是像上面我写的一样,在myShiro之前put就可以了吗。【并不是】。

我们可以看到FilterChainDefinitionMap的底层结构是Map,那提到map你们会想到什么。【无序,不可重复!!!】,对了就是这个【无序性!无序性!无序性!】重复说三次以表尊重。好了,小伙伴们现在就会知道问题出现在哪了,对【无序】,既然无序,你什么时候把规则put进去都是没啥意义的,他是根据hash散列确定在map中的位置的(具体怎么做可以查查资料看看,挺重要的一个知识,这里就不详细讲了)。而你过滤链在执行的时候,可就不会帮你考虑散列不散列的问题,他直接给你遍历map,取出相应的拦截规则。下面是我输出的遍历。【至此总算找到问题的

在这里插入图片描述

好了把握住问题的所在,该怎么解决呢,

把map变为有序的就可以了,说到有序自然而然的我们就可以想到LinkedHashMap,把HashMap改掉就行了

在这里插入图片描述

3.最终解决

把写的规律规则的存储结构改为LinkedHashMap即可,原因是HashMap无序,不会按你存储的顺序存储数据,而是通过hash等一系列方法确认存储位置,所以使用LinkedHashMap即可有序存储

在这里插入图片描述

成功进入注册页面

在这里插入图片描述

看看源码

其实我们也可以看到人家默认使用的就是LinkedHashMap【好的吧,我的锅,顶锅跑路】

在这里插入图片描述

4.小结

4.1 其实有很多原理我们是知道的,比如你一定知道【anon要写在需要认证的规则之前,hashMap是无序的】,但联系起来想就不一定一下子就能想到了,这个东西除了多积累经验,多学习,多思考,也没有其他办法

4.2 还有我们在自定义配置类的时候,最好去看看那人家原本是什么样子的,然后能照搬的就照搬,接着再去修改具体细节

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值