Android: HttpsUrlConnection с аутентификатором для базовой аутентификации повторяется навсегда, если пароль неверен (в ответе 401)

Я использую HttpsUrlConnection с базовой аутентификацией, используя Authenticator и устанавливаю объект по умолчанию Authenticator , подобный этому :

Authenticator.setDefault(new Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("user", "userpass"
            .toCharArray());
    }
});

Когда я получаю доступ к своей веб-службе, соединение вызывает мой метод getPasswordAuthentication () для получения учетных данных и отправляет их на веб-сервер. Это работает нормально, пока пароль правильный.: )

Однако случилось так, что кто-то изменил базовый пароль аутентификации на веб-сервере, и мой запрос не вернулся.

Я отлаживал его, но мой вызов getInputStream () никогда не возвращается. HttpsUrlConnection действительно получает ответ 401 и реагирует на него внутренне, снова получая те же учетные данные. Но поскольку я предоставил только одного пользователя и пароль, это снова не удастся (и снова ...).

Итак, мой вопрос: как я могу предотвратить это и где есть ловушка для реакции на неправильный пароль (соответственно.ответ 401), чтобы я мог показать соответствующее сообщение об ошибке и отменить запрос?

Вот выдержка из трассировки стека методов, которые постоянно вызываются на HttpsUrlConnection :

1: MyOwnHttpConnection$3.getPasswordAuthentication() line: 99   
2: Authenticator.requestPasswordAuthentication(InetAddress, int, String, String, String) line: 162  
3: HttpsURLConnectionImpl$HttpsEngine(HttpURLConnectionImpl).getAuthorizationCredentials(String) line: 1205 
4: HttpsURLConnectionImpl$HttpsEngine(HttpURLConnectionImpl).processAuthHeader(String, String) line: 1178   
5: HttpsURLConnectionImpl$HttpsEngine(HttpURLConnectionImpl).processResponseHeaders() line: 1118    
6: HttpsURLConnectionImpl$HttpsEngine(HttpURLConnectionImpl).retrieveResponse() line: 1044  
7: HttpsURLConnectionImpl$HttpsEngine(HttpURLConnectionImpl).getInputStream() line: 523 
8: HttpsURLConnectionImpl.getInputStream() line: 283    
11
задан Jens 18 October 2011 в 13:51
поделиться