为什么spring的“authenticationwebfilter”有自己的匹配器来检查请求是否需要身份验证?

fivyi3re  于 2021-09-29  发布在  Java
关注(0)|答案(2)|浏览(711)

正如标题所说; AuthenticationWebFilter 它有自己的匹配器集来确定请求是否需要身份验证。这似乎与spring security的做法背道而驰。
如果在spring安全配置中将端点设置为 .permitAll() 它也必须被排除在本报告之外 AuthenticationWebFilter ,为什么过滤器不让请求通过,让其余的Spring Security 处理它?
编辑:在steve riesenberg的回答中重新定义我的问题:
为什么 AuthenticationWebFilter ,身份验证筛选器,控制对资源的访问?这不应该由授权过滤器处理吗?
编辑:我刚刚发现,在没有身份验证的情况下,过滤器实际上不会阻止访问,只有在验证失败时,这才有意义。

0pizxfdo

0pizxfdo1#

我认为您的问题的答案在于理解SpringSecurity中的过滤器顺序和用途。你的问题特别提到 AuthenticationWebFilter ,用于React性应用。spring安全文档中有一个用于servlet应用程序的过滤器的全面列表,但是您可以参考securitywebfiltersorder枚举,以了解React式应用程序中的类似顺序。
在这两种情况下,您都可以看到“授权”( FilterSecurityInterceptor 在servlet中, AuthorizationWebFilter 在被动模式下)实际上是列表中的最后一个过滤器。因此,如果将路由设置为 .permitAll() 在里面 http.authorizeExchange() ,您正在指示授权管理器允许该请求,假设该请求通过筛选器链中的所有其他筛选器。通过将匹配器设置为 AuthenticationWebFilter 对于同一路由,您要求该筛选器尝试对该路由进行身份验证,这将终止处理并永远不会到达授权步骤。只有经过授权的请求才会到达您的应用程序代码,但有些请求可以在应用程序需要处理它们之前(而不是)由过滤器链处理。
简言之,在授权之前尝试/处理身份验证。

ffdz8vbo

ffdz8vbo2#

我发现我的困惑是因为对如何解决的误解 AuthenticationWebFilter 作品我的理解是,它将阻止任何未成功验证的请求,但事实证明它只会阻止验证失败的请求。完全没有身份验证的请求被允许通过。
这实际上是有道理的。
我没有仔细观察这个过滤器,因为我记得类似的servlet过滤器是这样工作的, AbstractAuthenticationFilter 或者我想是什么。我仍然很确定有一个是这样的,我仍然想知道为什么,但我不确定我会通过自己回答这个问题来结束这个问题。如果将来出现这个问题,我可能会发布另一个问题。
我感谢那些回答的人!

相关问题