标准表单身份验证Java servlet

时间:2012-06-25 00:45:26

标签: java security authentication servlets jetty

使用Java Servlets进行表单身份验证的标准方法是什么?

从现在开始,我使用简单的POST HTML表单实现了自己:

  1. 根据数据库检查发送的参数
  2. 如果存在,将用户对象保存到HttpSession
  3. 检查每个Servlet是否存在此对象
  4. 如果不是:重定向到登录页面并显示错误消息
  5. 但是现在我偶然发现了How to Configure Security with Embedded Jetty,现在我想我可以重复使用已经实现的解决方案,但这里的标准方法是什么?我自己使用Jetty,但是Tomcat或其他Web服务器呢?

    我还读到了 j_security_check ,那是什么?这是遗留方法吗?

3 个答案:

答案 0 :(得分:14)

您应该使用由Tomcat,Websphere,Glassfish等Servlet容器提供的JAAS安全性。

默认情况下,这些容器支持以下身份验证类型:

  • BASIC
  • DIGEST
  • FORM
  • CLIENT-CERT

HTTP基本身份验证

指定HTTP基本身份验证要求服务器从Web客户端请求用户名和密码,并通过将用户名和密码与指定或默认域中的授权用户数据库进行比较来验证用户名和密码是否有效。

如果未指定身份验证机制,则基本身份验证是默认设置。

使用基本身份验证时,会发生以下操作:

  1. 客户端请求访问受保护资源。
  2. Web服务器返回一个请求用户名和密码的对话框。
  3. 客户端将用户名和密码提交给服务器。 4. \服务器对指定领域中的用户进行身份验证,如果成功,则返回请求的资源。
  4. 下图显示了指定HTTP基本身份验证时会发生什么。 enter image description here

    HTTP基本身份验证客户端和服务器之间HTTP基本身份验证的四个步骤图

    基于表单的身份验证

    基于表单的身份验证允许开发人员通过自定义HTTP浏览器向最终用户提供的登录屏幕和错误页面来控制登录身份验证屏幕的外观。声明基于表单的身份验证时,会发生以下操作。

    1. 客户端请求访问受保护资源。
    2. 如果客户端未经身份验证,则服务器会将客户端重定向到登录页面。
    3. 客户端将登录表单提交给服务器。
    4. 服务器尝试对用户进行身份验证。
    5. 如果身份验证成功,则会检查经过身份验证的用户的主体,以确保其处于有权访问资源的角色中。如果用户已获得授权,则服务器将使用存储的URL路径将客户端重定向到资源。
    6. 如果身份验证失败,客户端将被转发或重定向到错误页面。
    7. 下图显示了指定基于表单的身份验证时会发生的情况。

      enter image description here

      创建基于表单的登录时,请务必使用Cookie或SSL会话信息维护会话。

      要使身份验证正常进行,登录表单的操作必须始终为j_security_check。进行此限制是为了使登录表单无论用于哪个资源都可以工作,并且避免要求服务器指定出站表单的操作字段。以下代码段显示了如何将表单编码到HTML页面中:

      <form method="POST" action="j_security_check">
        <input type="text" name="j_username">
        <input type="password" name="j_password">
      </form>
      

      摘要式身份验证

      与基本身份验证一样,摘要身份验证根据用户名和密码对用户进行身份验证。但是,与基本身份验证不同,摘要式身份验证不会通过网络发送用户密码。相反,客户端发送密码和附加数据的单向加密哈希。虽然密码不是通过线路发送的,但摘要式身份验证要求验证容器可以使用明文密码等效项,以便它可以通过计算预期的摘要来验证收到的验证者。

      <强>参考文献:

答案 1 :(得分:1)

尝试使用servlet过滤器,无需配置JAAS和其他人员

答案 2 :(得分:-1)

仅当数据库中不存在有关用户的数据时,才尝试转发到错误页面。 如果您发现您的用户使用以下代码将他重定向到他的“主页”

RequestDispatcher dis = request.getRequestDispatcher("relativeURL2Jsp");
dis.forward(request, response);