【发布时间】:2017-07-06 23:17:40
【问题描述】:
在授权服务器中,由于对客户端 id 的一些操作,需要添加自定义 BasicAuthenticationFilter。大多数实现与BasicAuthenticationFilter 相同。以下是相同的sn-p,
@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 过滤器链中删除/禁用 BasicAuthenticationFilter 或任何其他过滤器。
使用 Spring Boot 1.5.1 和 Spring Security OAuth2 2.0.12
【问题讨论】:
标签: java spring spring-boot spring-security spring-security-oauth2