spring curity中的内置过滤器顺序是怎么维护的?我想很多开发者都对这个问题感兴趣。本篇我和大家一起探黑龙江招生讨下这个问题。
httpcurity包含了一个成员变量filterorderregistration,这个类是一个内置过滤器注册表。至于这些过滤器的作用,不是本文介绍的重点,有兴趣可以去看看filterorderregistration的源码。
filterorderregistration维护了一个变量filtertoorder,它记录了类之间的顺序和上下之间的间隔步长。我们复制了一个filterorderregistration来直观感受一下过滤器的顺序:
打印结果:
我们可以看得出内置过滤器之间的位置是相对固定的,除了第一个跟第二个步长为200外,其它步长为100。
内置过滤器并非一定会生效,仅仅是预置了它们的排位,需要通过httpcurity的addfilterxxxx系列方法显式添加才行。
filterorderregistration提供了一个put方法:
从这个方法我们可以描写春天的古诗词得到几个结论:
内置的34个过滤器是有固定序号的,不可被改变。新加入的过滤器的类全限定名是不能和内置过滤器重复的。新加入的过滤器的顺序是可以和内置过滤器的顺序重复的。filterorderregistration还提供了一个getorder方法:
接下来我们分析一下httpcurity维护过滤器的几个方法。
addfilteratofftof是一个httpcurity的内置私有方法。filter是想要注册到defaultcurityfilterchain中的过滤器,offt是向右的偏移值,registeredfilter是已经注册到filterorderregistration的过滤器,而且registeredfilter没有注册的话会空指针。
务必记着registeredfilter一定是已注册入filterorderregistration的f入党培训实用教材ilter。
这里以addfilterafter为例。
addfilterafter是将filter的位置置于afterfilter后一位,假如afterfilter顺序值为400,则filter顺序值为401。addfilterbefore和addfilterat逻辑和addfilterafter仅仅是偏移值的区别,这里不再赘述。
addfilter的方法比较特殊:
filter必须是已经注册到filterorderregistration的filter,这意味着它可能是内置的filter,也可能是先前通过addfilterbefore、addfilterat或者addfilterafter注册的非内置filter。
之前看到一个问题,如果httpcurity注册两个重复序号的filtepaperedr会是怎么样的顺序呢?我们先来看下排序的机制:
看了下ordercomparator源码,其实还是通过数字的自然排序,数字越小越靠前。如果数字相同,索引越小越靠前。也就是同样的序号,谁先add到filters谁就越靠前。
到此这篇关于spring curity的内置过滤器是如何维护的的文章就介绍到这了,更多相关spring curity内置过滤器内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-05 20:34:25,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/f2ef021742b095c5430ad1c0aed3dac0.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:Spring Security内置过滤器的维护方法.doc
本文 PDF 下载地址:Spring Security内置过滤器的维护方法.pdf
留言与评论(共有 0 条评论) |