Java Spring Security OAuth2从默认筛选器链禁用基本身份验证筛选器

Java Spring Security OAuth2从默认筛选器链禁用基本身份验证筛选器,java,spring,spring-boot,spring-security,spring-security-oauth2,Java,Spring,Spring Boot,Spring Security,Spring Security Oauth2,在授权服务器中,由于对客户端id的某些操作,需要添加自定义基本身份验证筛选器。大多数实现与BasicAuthenticationFilter相同。下面是相同的一个片段 @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) { ... ... String username = someDec

在授权服务器中,由于对客户端id的某些操作,需要添加自定义基本身份验证筛选器。大多数实现与
BasicAuthenticationFilter
相同。下面是相同的一个片段

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) {
    ...
    ...
    String username = someDecoder(tokens[0]); // Kind of something
    ...
    ...
}
并且我的自定义过滤器放置在过滤器链中的
基本身份验证过滤器
之前

http.addFilterBefore(new CustomBasicAuthenticationFilter(authenticationManager(), authenticationEntryPoint()),
    BasicAuthenticationFilter.class);
这个自定义过滤器可以很好地工作,用户也可以成功地获得身份验证。但由于BasicAuthenticationFilter仍存在于链中,因此也会执行此筛选器并再次尝试对用户进行身份验证,但由于未操纵客户端凭据而失败。看

因此,要从过滤器链中删除/禁用
BasicAuthenticationFilter
,请遵循以下步骤,建议使用
BeanPostProcessor
。但是在Spring引导中,过滤器链注册为bean namespringSecurityFilterChain和class
FilterChainProxy
。返回不可修改的
安全过滤器链列表
。因此,接下来不可能修改
FilterChainProxy
bean

那么,如何以相同或任何其他方式从Spring Security筛选器链中删除/禁用
BasicAuthenticationFilter
或任何其他筛选器

http.addFilterBefore(new CustomBasicAuthenticationFilter(authenticationManager(), authenticationEntryPoint()),
    BasicAuthenticationFilter.class);

使用Spring Boot 1.5.1和Spring Security OAuth2.0.12

我认为您可以使用另一个答案:

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

默认情况下,Spring Boot为每个
过滤器
在应用程序上下文中
FilterRegistrationBean
不存在。这允许您 控制注册过程,包括禁用 注册,通过为
过滤器
。对于
基本身份验证筛选器
所需的 配置如下所示:

@Bean
公共过滤器注册bean注册(基本身份验证过滤器){
FilterRegistrationBean注册=新的FilterRegistrationBean(过滤器);
registration.setEnabled(false);
申报登记;
}
您也可能对以下内容感兴趣: 它讨论了如何禁用过滤器的自动注册 和
Servlet
bean


从…起您只能禁用那些在
FilterRegistrationBean
中注册的过滤器/servlet。其中as
BasicAuthenticationFilter
未注册到相同的服务器。尝试解决方案的具体错误是
考虑在配置中定义“org.springframework.security.web.authentication.www.BasicAuthenticationFilter”类型的bean。