2017-01-17 2 views
1

Я устанавливаю безопасное соединение http и пытаюсь получить из него InputStream. Соединение происходит, и я могу получить данные, но я фактически отправляю два запроса авторизации на сервер? Вот мой код, который получает соединение и получить входной поток установленный:Проверка подлинности HttpsURLConnection дважды?

someConnection = (HttpsURLConnection) url.openConnection(); 
String userPass = username + ":" + password; 
String basicAuth = "Basic" + new String(new Base64().encode(userPass.getBytes())); 
someConnection.setRequestProperty("Authorization", basicAuth);    
if (header != null) someConnection.setRequestProperty(header, headerValue); 
InputStream is = someConnection.getInputStream(); 

Там нет движения, пока метод .getInputStream() не называется. Потом я вижу два запроса для авторизации:

Wireshark output

Любые идеи, почему она делает это? по какой-то причине первый запрос, по-видимому, терпит неудачу.

+0

Попытайтесь добавить пробел после 'Basic', заменив' 'Basic '' на '' Basic' ' –

+0

Добавление пространства действительно решило проблему, но я хотел бы указать, что без пробела второй раз ВСЕГДА аутентифицируется правильно. –

ответ

1

Значение заголовка вашего Authorization не совпадает с ожидаемым форматом, он должен быть "Basic " с последующим ${username}:${password} закодированного с RFC2045-MIME вариантом Base 64 (более подробной информации о Basic access authentication).

Здесь вы забыли добавить конечное пространство после Basic, чтобы аутентификация никогда не выполнялась должным образом, что приводит к неожиданному поведению.

1

Должно быть место между «Основными» и закодированными базовыми данными.

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

Смежные вопросы