在授权服务器中,由于某些客户端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过滤器链中注册了豆名springSecurityFilterChain和FilterChainProxy
。正如FilterChainProxy-GitHub返回不可修改的SecurityFilterChain
列表。所以它的下一个不可能改变FilterChainProxy
豆。
那么如何实现相同或任何其他方式来删除/禁用BasicAuthenticationFilter
或Spring Security Filter链中的任何其他过滤器。
使用Spring 1.5.1引导和Spring安全的OAuth2 2.0.12
来自[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
尝试解决方案的具体错误是'考虑在你的配置中定义一个'org.springframework.security.web.authentication.www.BasicAuthenticationFilter'类型的bean。 – Sheel