我有一个模仿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>");
}
答案 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中复制默认登录表单。