1

我有一个模仿 Domino 登录表单的 servlet。通过目录服务对 LDAP 进行身份验证。

服务器首先检查密码是否过期。如果它还没有过期,那么它会继续对用户进行身份验证。然后,验证过程从 servlet 开始,通过发送模仿 Domino 的默认登录页面的 HTML,代码如下。它不是很安全。

我可以调用 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>");
}
4

1 回答 1

0

我将从 servlet 开始。我认为您正在寻找的是servlet 中的createSession 方法。它提供了多种在服务器上启动用户认证会话的方法。我用它所有的时间。有关 Java 中的 Domino 对象的更多详细信息,也包括此处的身份验证。尽管它已经有几年历史了,Java API 仍然很重要。

在我的 servlet 中运行的快速代码片段。

        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 标头字段(SSL 加密标头),然后使用HTTPServletRequest.getHeader在 servlet 中提取值。如果您不想复制默认的 Domino 标头名称,则不需要复制默认的 Domino 标头名称,因为您有一个处理数据的 servlet。您可以做任何您想做的事情,而不必特别需要复制 Domino 中的默认登录表单。

于 2013-04-26T07:23:15.127 回答