2013-04-25 106 views
1

我有一個模仿Domino登錄表單的servlet。通過目錄服務對LDAP進行身份驗證。以編程方式驗證用戶

服務器首先檢查密碼是否過期。如果尚未過期,則繼續對用戶進行身份驗證。然後,通過發送模仿Domino默認登錄頁面的HTML,驗證過程從servlet開始,代碼如下。這不是很安全。

在Java中是否有一個Domino方法可以調用來從我的servlet驗證用戶?

我正在考慮做一個POST,但不知道這是否安全。

任何想法?

private void logUserIntoNotes(HttpServletResponse response) throws IOException 
    { 
    String action = "/names.nsf?Login"; 

    System.out.println("Action=" + action); 
    System.out.println("Username=" + username); 
    //System.out.println("Password=" + password); 
    System.out.println("RedirectTo=" + redirectTo); 


    response.setContentType("text/html"); 

    ServletOutputStream out = response.getOutputStream(); 
    out.println("<html><head><title>Login Page</title></head><body>"); 
    out.println("Logging in. Please wait ..."); 
    out.println("<form method=\"post\" name=\"login\" action=\"" + action + "\">"); 
    out.println("<input type=\"hidden\" name=\"Username\" value=\"" + username + "\">"); 
    out.println("<input type=\"hidden\" name=\"Password\" value=\"" + password + "\">"); 
    out.println("<input type=\"hidden\" name=\"RedirectTo\" value=\"" + redirectTo + "\">"); 
    out.println("</form>"); 
    out.println("<SCRIPT LANGUAGE=\"JavaScript\"> document.forms[\"login\"].submit(); </SCRIPT>"); 
    out.println("</body></html>"); 
} 
+0

你能解釋你爲什麼這樣做嗎?爲什麼用戶不能以正常方式登錄到Domino服務器? – 2013-04-25 21:03:29

+0

@Richard。一個合理的問題,但是一旦涉及servlet,任何事情都可能發生。 – giulio 2013-04-26 07:34:36

+0

@布魯斯,你說你檢查密碼已過期。這意味着你正在使用某種認證。 LTPAToken? – giulio 2013-04-26 07:37:39

回答

0

我將從servlet開始。我認爲你在尋找的是在servlet中的createSession method。它提供了許多方法在服務器上啓動用戶驗證的會話。我用它所有的時間。關於Java中的Domino對象的更多細節還涵蓋了認證here。即使已經有幾年了,Java API仍然是相關的。

在我的小服務程序中工作的快速代碼片段。

 NotesThread.sinitThread(); 
     try { 
      session = NotesFactory.createSession("", sUsr, sPwd); 
     } catch(NotesException ne) { 
      // invalid username/password or something else horrible happened. 
      NotesThread.stermThread(); 
      if (ne.id!=4486){ 
       System.out.println("Notes Error:" + ne.id); 
       ne.printStackTrace(); 
      } 


     } 

但你的問題是,你需要安全地將憑據發送到服務器。您可以使用SSL,然後添加HTTP header fields in the request at the browser(SSL加密標頭),並使用HTTPServletRequest.getHeader將這些值拉出到servlet中。如果您不想複製缺省的Domino頭名稱,因爲您有一個servlet處理數據。你可以做任何你想做的事情,而不必特別需要複製Domino中的默認登錄表單。

+0

我可以如何做到這一點的任何示例?我必須承認,Java技能可能並不強大 – 2013-04-29 14:24:11

+0

Domino Designer幫助文件中有許多示例將詳細介紹CreateSession方法。我在我的回答中添加了一段代碼snpipet – giulio 2014-04-13 05:44:25

相關問題