2011-03-27 54 views
0

當應用程序通過NTLM進行身份驗證時,JSP中的autocompleter存在一個奇怪的問題。 NTLM身份驗證代碼傳遞並重定向到JSP頁面後,我的自動完成程序根本不起作用。我使用autocompleter Ajax.Autocompleter("emp","autocomp","getajaxdata.jsp");
For reference在JSP中不能使用NTLM代碼的Autocompleter

下如果我從我的應用程序中刪除NTLM身份驗證碼,然後autocompleter會工作。 我該如何解決這個問題?奇怪的是,這個問題只發生在IE瀏覽器,在Firefox中它工作正常。

任何幫助是非常可觀的。

問候

代碼我使用NTLM身份驗證在servlet的

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++; 
     } 
+0

換句話說,MSIE不會一起發送正確的WWW-Authenticate'請求頭?你用什麼框架來發送Ajax請求? – BalusC 2011-03-27 21:51:53

+0

@BalusC我並不完全瞭解您的評論,但我確信WWW_Authenticate請求已正確發送,因此身份驗證正常工作。關於發送Ajax請求的框架''Ajax.Autocompleter(「emp」,「autocomp」,「getajaxdata.jsp」);'。 **實現主要是通過JavaScript - 只有後端返回結果將語言/平臺特定**參考,請參閱這裏,因爲我跟着[這] http://todotomorrow.blogspot.com/2005/06/ajax- autocompletion.html文章。 – user75ponic 2011-03-28 04:23:36

+0

如果我從NTLM身份驗證代碼中刪除以下行,則不會發生問題'response.sendError(response.SC_UNAUTHORIZED);'爲什麼這行代碼導致問題?有任何想法嗎? – user75ponic 2011-03-28 06:15:05

回答