1

在授权服务器中,由于某些客户端ID的操作,需要添加自定义BasicAuthenticationFilter。大多数实现与BasicAuthenticationFilter相同。以下是摘录的一样,Spring Security OAuth2禁用默认过滤器链中的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过滤器链中注册了豆名springSecurityFilterChainFilterChainProxy。正如FilterChainProxy-GitHub返回不可修改的SecurityFilterChain列表。所以它的下一个不可能改变FilterChainProxy豆。

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

使用Spring 1.5.1引导和Spring安全的OAuth2 2.0.12

回答

0

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

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

默认情况下,春季启动创建每个 Filter在其中一个 FilterRegistrationBean不存在的应用程序上下文FilterRegistrationBean。这允许你 通过声明你自己的FilterRegistrationBeanFilter来控制注册过程,包括禁用 注册。为了您的BasicAuthenticationFilter所需 配置是这样的:

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

您还可能有兴趣在this Spring Boot issue 其中讨论如何禁用的FilterServlet豆自动注册。

+0

来自[Spring doc](http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-add-a-servlet-filter-or-listener-as-春豆)。您只能禁用那些使用'FilterRegistrationBean'注册的filter/servlet。 'BasicAuthenticationFilter'没有注册。 [检查](https://github.com/spring-projects/spring-security/blob/a82cab7afdb1fc58830b1c415f1874d36b2c6c92/config/src/main/java/org/springframework/security/config/annotation/web/configurers/HttpBasicConfigurer.java# L208) – Sheel

+0

尝试解决方案的具体错误是'考虑在你的配置中定义一个'org.springframework.security.web.authentication.www.BasicAuthenticationFilter'类型的bean。 – Sheel

相关问题