Я очень смущен тем, как это должно работать. Я пытался использовать что-то вроде этого:
con = (HttpURLConnection) url2.openConnection();
con.setReadTimeout(10000);
con.setInstanceFollowRedirects(true);
con.setAllowUserInteraction(true);
con.setDoOutput(true);
con.setDoInput(true);
Authenticator.setDefault(new MyAuthenticator());
con.connect();
class MyAuthenticator extends Authenticator {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("myUser", "MyPassword".toCharArray());
}
}
Я получаю ошибку 401, возвращенную этим методом, так что, очевидно, я упускаю суть. Согласно этому графику NTLMv2 должен поддерживаться в JRE 6. Моя путаница заключается в том, что это работает на Android. В трассировке стека из исключения, выданного getOutputStream
, я вижу реализацию Apache HttpURLConnection
, на которую ссылаются.
Из того, что я обнаружил в своем исследовании, Apache не может включить протоколы NTLMv2 из-за проблем с лицензированием. Это почему на андроиде не работает?
В любом случае, я бы хотел знать, как это будет сделано на Java, а не только на Android.