【问题标题】:Spring Security OAuth2 disable BasicAuthenticationFilter from default filter chainSpring Security OAuth2 从默认过滤器链中禁用 BasicAuthenticationFilter
【发布时间】: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


    【解决方案1】:

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

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

    默认情况下,Spring Boot 会为每个 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 豆子。

    【讨论】:

    • 来自Spring doc。您只能禁用那些在FilterRegistrationBean 注册的过滤器/servlet。其中BasicAuthenticationFilter 未注册相同。 Check
    • 尝试解决方案的具体错误是Consider defining a bean of type 'org.springframework.security.web.authentication.www.BasicAuthenticationFilter' in your configuration.
    猜你喜欢
    • 2016-12-04
    • 2018-09-20
    • 2012-12-23
    • 2020-08-09
    • 2023-03-27
    • 1970-01-01
    • 2013-09-30
    • 2017-11-21
    • 2019-08-04
    相关资源
    最近更新 更多