一段时间后,HTTP摘要验证失败,并显示“ 400错误请求”

时间:2019-02-11 11:46:35

标签: java wildfly httpurlconnection digest-authentication

我在Java客户端上的HTTP摘要认证有问题。我在Wildfly上运行Web服务(SOAP)客户端,但是如果我使用URL.openConnection(),则会发生相同的问题。失败的部分是基础的sun.net.www.protocol.http.HttpURLConnection及其身份验证处理。我正在通过java.net.Authenticator设置凭据。

    java.net.Authenticator.setDefault(new java.net.Authenticator() {
        @Override
        protected java.net.PasswordAuthentication getPasswordAuthentication() {
            return new java.net.PasswordAuthentication("username", "password");
        }
    });

    URL url = new URL(requestUri);

    HttpURLConnection conn = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);
    conn.setRequestMethod("GET");
    BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    while (rd.readLine() != null) { }
    rd.close();

最初一切运行良好,但几周后,所有HTTP调用都从服务器获得响应“ 400错误的请求”。如果重新启动JVM,所有调用将再次起作用。我唯一能想到的是服务器认为摘要身份验证有问题(例如错误的随机数计数器),并使用HTTP 400进行响应。HttpURLConnection(或实际上是Authenticator?)无法将HTTP 400理解为身份验证失败并继续使用相同的身份验证令牌。重新启动JVM之后,调用自然会请求新的服务器随机数,并从0开始启动随机数计数器,然后一切都会重新开始。

有什么我可以做的吗?我做错了什么吗?我是否可以以某种方式强制基础JRE实现将HTTP 400理解为身份验证失败,或者强制客户端为所有请求请求新的服务器随机数?

我要发送请求的服务器是MS Dynamics NAV。我的应用程序的另一部分正在向同一服务器发出类似的HTTP请求,但使用的是Apache HTTP Client,并且没有任何问题。

更新: 我正在运行Oracle服务器JRE 8u152

0 个答案:

没有答案