Автозаполнение в JSP не работает с кодом NTLM - PullRequest
0 голосов
/ 27 марта 2011

У меня странная проблема с автозаполнением в JSP, когда приложение проходит проверку подлинности через NTLM.После того, как код аутентификации NTLM передан и перенаправлен на страницу JSP, мой автозаполнение не работает вообще.Я использую следующее для автозаполнения Ajax.Autocompleter("emp","autocomp","getajaxdata.jsp");
Для справки

Если я удалю код аутентификации NTLM из своего приложения, тогда автозаполнение будет работать.Как я могу решить эту проблему?Странно, но эта проблема возникает только в IE, в Firefox она работает нормально.

Любая помощь очень важна.

С уважением

Код, который я использовал для аутентификации 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++;
        }

1 Ответ

1 голос
/ 29 сентября 2011

У меня похожие проблемы, и я обнаружил следующее:

опубликовано с пустыми данными (спорадические)

Если вы выполняете поиск вокруг ... NTLM делает некоторые забавныевещи:

Дополнительная информация о NTLM

...