BasicAuthenticationFilter

BasicAuthenticationFilter

在Authorization Server中,由于对客户端ID的某种操纵,需要添加自定义BasicAuthenticationFilter。大多数实现与BasicAuthenticationFilter相同。以下是相同的摘录,

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) {
    ...
    ...
    String username = someDecoder(tokens[0]); // Kind of something
    ...
    ...
}

我的自定义过滤器放置在过滤器链中的BasicAuthenticationFilter之前。
http.addFilterBefore(new CustomBasicAuthenticationFilter(authenticationManager(), authenticationEntryPoint()),
    BasicAuthenticationFilter.class);

此自定义过滤器的功能非常出色,用户也已成功通过身份验证。但是由于BasicAuthenticationFilter仍然存在于链中,因此也会执行此过滤器并尝试再次对用户进行身份验证,但由于未操纵客户端凭据而失败。参见BasicAuthenticationFilter-GitHub

因此,要从此过滤器链中删除/禁用BasicAuthenticationFilter,请遵循此SOQ,建议在其中使用BeanPostProcessor。但是在Spring Boot过滤器链中,注册的bean名称为 springSecurityFilterChain 和类 FilterChainProxy 。作为FilterChainProxy-GitHub返回的SecurityFilterChain的不可修改列表。因此,下一步不可能更改FilterChainProxy bean。

那么如何实现以相同或任何其他方式从Spring Security Filter链中删除/禁用BasicAuthenticationFilter或任何其他过滤器。

使用Spring Boot 1.5.1和Spring Security OAuth2 2.0.12

最佳答案

我认为您可以使用其他答案:https://stackoverflow.com/a/28428154/2648577

---- >>>这是一个复制/粘贴(更改过滤器名称)。

默认情况下,Spring Boot为每个创建一个FilterRegistrationBean 在应用程序上下文中的Filter FilterRegistrationBean不存在。这使您能够
控制注册过程,包括禁用
注册,方法是声明您自己的FilterRegistrationBean Filter。对于您的BasicAuthenticationFilter,必填
配置如下所示:

@Bean
public FilterRegistrationBean registration(BasicAuthenticationFilter filter) {
  FilterRegistrationBean registration = new FilterRegistrationBean(filter);
  registration.setEnabled(false);
  return registration;
}

您可能也对this Spring Boot issue感兴趣
讨论如何禁用Filter的自动注册
Servlet bean。

09-05 14:56