在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
。但是在使用bean名称 springSecurityFilterChain 和类 FilterChainProxy
注册的Spring Boot过滤器链中。当FilterChainProxy-GitHub返回SecurityFilterChain
的不可修改列表时。所以下一个不可能改变FilterChainProxy
bean。
那么如何实现从Spring Security Filter链中删除/禁用BasicAuthenticationFilter
或任何其他过滤器的相同或任何其他方式。
使用Spring Boot 1.5.1和Spring Security OAuth2 2.0.12
答案 0 :(得分:1)
我认为您可以使用其他答案: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
豆。