通过NTLM对应用程序进行身份验证时,JSP中的自动完成程序出现了一个奇怪的问题。通过NTLM身份验证代码并将其重定向到JSP页面后,我的自动完成程序根本无法工作。我正在将以下内容用于自动完成器Ajax.Autocompleter("emp","autocomp","getajaxdata.jsp");
For reference
如果我从应用程序中删除NTLM身份验证代码,则自动完成程序将起作用。
我该如何解决这个问题?奇怪的是,此问题仅发生在IE中,在Firefox中工作正常。
任何帮助都是非常明显的。
问候
我在Servlet中用于NTLM身份验证的代码
public void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {response.setContentType(CONTENT_TYPE);
/**
* Coding to find out the current logged in user name
**/
String username="";
String auth = request.getHeader("Authorization");
if (auth == null)
{
response.setStatus(response.SC_UNAUTHORIZED);
response.setHeader("WWW-Authenticate", "NTLM");
response.flushBuffer();
return;
}
if (auth.startsWith("NTLM "))
{
byte[] msg = new sun.misc.BASE64Decoder().decodeBuffer(auth.substring(5));
int off = 0, length, offset;
if (msg[8] == 1)
{
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(response.SC_UNAUTHORIZED);
return;
}
else if (msg[8] == 3)
{
off = 30;
length = msg[off+9]*256 + msg[off+8];
offset = msg[off+11]*256 + msg[off+10];
username = new String(msg, offset, length);
}
}
/**
* Coding for removing extra white spaces from the user name
*/
String windname="";
String windname1=username.replaceAll(" ",null );
int l=username.length();
int i=0;
while (i<l)
{
if (username.charAt(i)==0)
{
}
else
{
char temp=username.charAt(i);
windname=windname+temp;
}
i++;
}
最佳答案
我遇到类似的问题,我发现了这一点:
posted with empty data (sporadical)
如果您确实搜索... NTLM会做一些有趣的事情:
Some more info on NTLM
关于java - JSP中的自动完成程序不能与NTLM代码一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5448794/