【问题标题】:Generic Authentication Filter in Spring Security used for AuthenticationSpring Security 中用于身份验证的通用身份验证过滤器
【发布时间】:2022-01-20 10:00:03
【问题描述】:

我是 Spring Security 的新手,想更好地了解身份验证过程

这是我在互联网上找到的与该主题相关的内容,如果我在过程中有错误,请告诉我:

  1. 身份验证过程从Filter 开始,它可能是FilterChain 的一部分。过滤器的类型可能是UsernamePasswordAuthenticationFilter。 HTTP 请求被拦截,并试图创建一个Authentication Request(实现Authentication 接口的类的对象,即UsernamePasswordAuthenticationToken)。
  2. Authentication 对象被委托给AuthenticationManager
  3. 根据传递给AuthenticationManager 的内容,它将其委托给适当的AuthenticationProvider(即DaoAuthenticationProvider),在那里进行真正的身份验证。
  4. AuthenticationProvider 将完全经过身份验证的Authentication 对象发送到AuthenticationManager
  5. 在调用AuthenticationManagerFilter 中,调用SecurityContextHolder.getContext().setAuthentication(authResult); 并完成身份验证过程。

我的问题是关于Filter 类和与身份验证相关的FilterChain 的具体实现。

在我们的应用程序中,大多数身份验证过滤器都扩展了AbstractAuthenticationProcessingFilter,并且FilterChain 属于CompositeFilter 类。这个接口的事实上的“正确”实现是什么?对于这样一个愚蠢的问题,我提前道歉,但仍然需要学习这个概念。

【问题讨论】:

  • 您从研究中描述的一切都是正确的。不幸的是,我不清楚这个问题。您能否详细说明问题?注意:Spring Security 使用FilterChainProxySecurityFilterChain 列表,而不是CompositeFilter
  • 我的主要问题是关于身份验证过程的接口FilterSecurityFilterChain最常用的类(实现)

标签: java authentication spring-security servlet-filters


【解决方案1】:

SecurityFilterChain 有一个实现,DefaultSecurityFilterChain

Filter 的实现太多,无法将一种实现视为最常见的实现。 Spring Security 中扩展AbstractAuthenticationProcessingFilter 的可用身份验证过滤器是UsernamePasswordAuthenticationFilterOAuth2LoginAuthenticationFilterSaml2WebSsoAuthenticationFilter

要使用的“正确”过滤器很大程度上取决于您的用例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2014-02-26
    • 2011-10-17
    相关资源
    最近更新 更多