【问题标题】:Spring Webflux: Remove WWW-authenticate headerSpring Webflux:删除 WWW-authenticate 标头
【发布时间】:2018-10-19 10:29:27
【问题描述】:

我正在使用带有基本身份验证的 Spring 5 Webflux。

问题:
当我输入错误的用户名或密码时,spring 会使用 Http Status 401 响应并包含 www-authenticate: Basic realm="Realm" Http Header,这会导致浏览器弹出基本身份验证框。

如何在 Spring 5 Webflux 中删除 HTTP 标头?
我必须做一个自定义的网络过滤器吗?

【问题讨论】:

    标签: basic-authentication spring-webflux


    【解决方案1】:

    下面的代码是从我的项目中复制的 Kotlin 代码。但这个想法可以简单地转移到 Java 中。

    因此,解决方案与自定义 Webfilter 相关。

    @Component
    class HttpHeaderWebFilter: WebFilter {
    
        override fun filter(exchange: ServerWebExchange, next: WebFilterChain): Mono<Void> {
    
            return next.filter(exchange).then(Mono.defer {
    
                val headers = exchange.response.headers
    
                if (headers.containsKey("WWW-Authenticate")) {
                    headers.remove("WWW-Authenticate")
                }
    
                Mono.empty<Void>()
            })
        }
    }
    

    【讨论】:

    • exchange.response.headers 为 ReadOnlyHttpHeader 列表,抛出异常
    【解决方案2】:

    我们可以使用下面的

    if (exchange.getRequest().getHeaders().containsKey("headerKey")) {
        exchange.getRequest().mutate().header("headerKey", null, null);
    }
    

    我们使用双空来克服不推荐使用的覆盖方法。

    如果您使用的是 Spring Framework 5.2,则使用单个 null 就足够了。

    【讨论】:

      猜你喜欢
      • 2012-10-12
      • 2020-05-01
      • 2016-03-21
      • 1970-01-01
      • 2016-06-02
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      • 2014-04-10
      相关资源
      最近更新 更多