以编程方式验证用户

时间:2013-04-25 20:23:17

标签: java lotus-domino

我有一个模仿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>");
}

1 个答案:

答案 0 :(得分:0)

我将从servlet开始。我认为你在servlet中寻找的是createSession method。它提供了许多在服务器上启动用户身份验证会话的方法。我用它所有的时间。关于Java中Domino对象的更多细节,也包括身份验证here。即使它已经存在了几年,但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 header fields in the request at the browser,(SSL加密标头),并使用HTTPServletRequest.getHeader在servlet中提取值。如果您不希望复制默认的Domino标头名称,则需要复制默认的Domino标头名称,因为您有一个处理数据的servlet。您可以执行任何您想要的操作,而不必特别需要在Domino中复制默认登录表单。