Spring Webflux:删除WWW-authenticate标头

时间:2018-05-09 10:25:40

标签: basic-authentication spring-webflux

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

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

如何在Spring 5 Webflux中删除该HTTP标头?
我是否必须自定义Webfilter?

2 个答案:

答案 0 :(得分:0)

以下代码是从我的项目复制的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>()
        })
    }
}

答案 1 :(得分:0)

我们可以使用以下

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

我们使用double null来克服不推荐使用的Overriding方法。

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