Проверка подлинности дайджеста HTTP через некоторое время завершается с «400 Bad Request» - PullRequest
0 голосов
/ 11 февраля 2019

У меня проблема с дайджест-проверкой подлинности HTTP на клиенте Java.Я использую клиент Web-сервиса (SOAP) на Wildfly, но та же проблема возникает, если я использую 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 Bad request» с сервера.Если я перезапущу JVM, все вызовы снова будут работать.Единственное, о чем я могу думать, это то, что сервер думает, что что-то не так с аутентификацией дайджеста (например, неверный счетчик nonce), и отвечает HTTP 400. HttpURLConnection (или фактически Authenticator?) Не понимает HTTP 400 как неудачную аутентификациюи продолжает использовать те же токены аутентификации.После перезапуска JVM вызовы естественно запрашивают новый одноразовый номер сервера и запускают счетчик одноразовых номеров с 0, и все снова работает.

Могу ли я что-нибудь сделать?Я что-то не так делаю?Могу ли я как-то заставить базовую реализацию JRE либо понимать HTTP 400 как неудачную аутентификацию, либо заставить клиента запрашивать новый одноразовый номер сервера для всех запросов?

Сервер, к которому я обращаюсь, - это MS Dynamics NAV.В другом разделе моего приложения выполняются аналогичные HTTP-запросы к тому же серверу, но с использованием HTTP-клиента Apache, и никаких проблем не возникает.

Обновление : я использую сервер Oracle JRE 8u152

...