Java Spring Security OAuth2从默认筛选器链禁用基本身份验证筛选器
在授权服务器中,由于对客户端id的某些操作,需要添加自定义基本身份验证筛选器。大多数实现与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
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和classFilterChainProxy
。返回不可修改的安全过滤器链列表
。因此,接下来不可能修改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。其中asBasicAuthenticationFilter
未注册到相同的服务器。尝试解决方案的具体错误是考虑在配置中定义“org.springframework.security.web.authentication.www.BasicAuthenticationFilter”类型的bean。