NTLM аутентификация с Windows 10 и IE11 браузером
У меня есть веб-приложение (J2EE), и следующий код проверяет пользователя (из AD) и получает имя пользователя:
public void getUser(HttpServletRequest request, HttpServletResponse response, String methodGetPost) throws IOException {
try {
String auth = request.getHeader("Authorization");
if (auth == null) {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
response.setHeader("WWW-Authenticate", "NTLM");
return;
} else if (auth.startsWith("NTLM ")) {
byte[] msg = new sun.misc.BASE64Decoder().decodeBuffer(auth.substring(5));
int off = 0, length, offset;
if (msg[8] == 1) {
off = 18;
byte z = 0;
byte[] msg1 =
{ (byte)'N', (byte)'T', (byte)'L', (byte)'M', (byte)'S',
(byte)'S', (byte)'P', z, (byte)2, z, z, z, z, z, z, z,
(byte)40, z, z, z, (byte)1, (byte)130, z, z, z, (byte)2,
(byte)2, (byte)2, z, z, z, z, z, z, z, z, z, z, z, z };
response.setHeader("WWW-Authenticate",
"NTLM "
+ new sun.misc.BASE64Encoder().encodeBuffer(msg1).trim());
response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
return;
} else if (msg[8] == 3) {
off = 30;
length = msg[off + 17] * 256 + msg[off + 16];
offset = msg[off + 19] * 256 + msg[off + 18];
String remoteHost = "";
try {
remoteHost = clear(new String(msg, offset, length));
}catch(Exception e){
logger.logError("DefaultApps.getUser: error al recuperar el remoteHost");
}
length = msg[off + 1] * 256 + msg[off];
offset = msg[off + 3] * 256 + msg[off + 2];
String domain = "";
try{
domain = clear(new String(msg, offset, length));
}catch(Exception e){
logger.logError("DefaultApps.getUser: error al recuperar el domain");
}
length = msg[off + 9] * 256 + msg[off + 8];
offset = msg[off + 11] * 256 + msg[off + 10];
String username = clear(new String(msg, offset, length));
}
}
} catch (Exception e) {
response.sendRedirect("/pages/jsp/login/Login.jsp");
return;
}
}
Этот код корректно работает с этим клиентом: windows 7 && ie11, но с windows 10 && ie11 я не могу получить тип сообщения 3.
Не могли бы вы помочь мне?
Спасибо!