0

我得到了简单的 JAX-RS 资源,并且我使用 Apache CXF WebClient 作为客户端。我正在使用 HTTP 基本身份验证。当它在服务器上失败时,典型的 401 UNAUTHORIZED 响应与 WWW-Authenticate 标头一起发送。

收到此 (WWW-Authenticate) 标头时,WebClient 会发生奇怪的行为。WebClient(内部)多次(20 次)重复相同的请求并且失败。

WebClient webClient = WebClientFactory.newClient("http://myserver/auth");
try {
    webClient.get(SimpleResponse.class);
    // inside GET, 20 HTTP GET requests are invoked
} catch (ServerWebApplicationException ex) {
    // data are present when WWW-authenticate header is not sent from server
    // if header is present, unmarshalling fails
    AuthError err = ex.toErrorObject(webClient, AuthError.class);
}
4

2 回答 2

1

我在 CXF 3.1 中发现了同样的问题。

在我的情况下,如果响应为 401/407,则对于所有异步 http 休息请求,线程将进入无限循环并且打印WWW-Authenticate 未设置为响应

我分析了我发现的代码:在异步调用控制流的情况下HttpConduit.handleRetransmits-> processRetransmit-> AsyncHTTPConduit.authorizationRetransmit ,返回true和HttpConduit中的代码是

int maxRetransmits = getMaxRetransmits(); updateCookiesBeforeRetransmit(); int nretransmits = 0; while ((maxRetransmits < 0 || nretransmits < maxRetransmits) && processRetransmit()) { nretransmits++; }

如果maxRetransmits = -1processRetransmit()返回true,则线程进入无限循环。

因此,为了克服这个问题,我们将 maxRetransmitValue 作为 0 传递给HttpConduit.getClient().

希望其他人也会。

于 2018-08-03T05:08:35.933 回答
0

这已在最新版本的 CXF 中得到修复:

https://issues.apache.org/jira/browse/CXF-4815

于 2013-05-23T13:18:50.200 回答