在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。