繁体   English   中英

Spring 安全认证逻辑

[英]Spring Security authenticate logic

Spring 安全性中的端点安全性通过过滤器列表实现。 我需要澄清一下。

假设过滤器已成功验证请求并在安全上下文中设置验证 object。 该过滤器还调用了 filterchain.dofilter()。 假设 authentication.isAuthenticated() 返回 true - 过滤器已经设置了它。

如果调用 isAuthenticated() 时安全上下文中的身份验证 object 返回 true,那么后续过滤器是否会忽略身份验证过程(意味着它们不会调用 authenticationmanager.authenticate())? 或者即使 isAuthenticated() 在从安全上下文中检索到的身份验证 object 上返回 true,他们仍然会调用 authenticationmanager.authenticate () 吗? 假设请求路径与过滤器配置匹配(这意味着后续过滤器也会看到请求,因为请求 servlet 路径与它们的配置匹配)

提前致谢。

我会尽量详细回答。

首先,Spring Security 确实使用过滤器链,但通常,身份验证从链中的一个过滤器开始。 如果您以多种方式对用户进行身份验证,那么您需要实现多个身份验证提供程序(AuthenticationProvider)。 看一下图 1。身份验证从过滤器级别开始,由一个名为 AuthenticationManager 的管理器负责。 经理找到适合的 AuthenticationProvider。 图1

在某些情况下,您可能希望实现多个身份验证过滤器。 假设您有一个自定义的多因素身份验证 (MFA) 解决方案。 但决定跳过哪些过滤器的是您。 默认情况下,请求遵循链中的每个过滤器。

如果您实现了 OncePerRequestFilter 并覆盖 shouldNotFilter() 方法以告诉过滤器何时不适用,则可以设计一个要跳过的过滤器。

综上所述:

  • 以多种方式实施身份验证,您使用身份验证提供程序
  • 除非您明确让他们跳过它,否则后续过滤器将看到该请求
  • 我还向您推荐我写的关于 Spring Security - Spring Security in Action 的书的第一部分。 您将找到有关身份验证、授权和过滤器链如何工作的更详细说明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM