标准表单身份validationJava servlet

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

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

  1. 检查发送的参数对数据库
  2. 如果存在,将User对象保存到HttpSession中
  3. 检查每个Servlet是否存在此对象
  4. 如果不是:重定向到登录页面,并显示错误消息

但现在我偶然发现了如何使用Embedded Jetty配置安全性,现在我想我可以重用已经实现的解决方案来解决这个问题,但这里的标准方法是什么? 我自己在使用Jetty,但是Tomcat或其他Web服务器呢?

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

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

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

  • BASIC
  • 消化
  • 形成
  • CLIENT-CERT

HTTP基本身份validation

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

如果未指定身份validation机制,则基本身份validation是默认身份validation。

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

  1. 客户端请求访问受保护资源。
  2. Web服务器返回一个请求用户名和密码的对话框。
  3. 客户端将用户名和密码提交给服务器。 4. \服务器对指定领域中的用户进行身份validation,如果成功,则返回请求的资源。

下图显示了指定HTTP基本身份validation时发生的情况。 在此处输入图像描述

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

基于表单的身份validation

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

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

下图显示了指定基于表单的身份validation时会发生的情况。

在此处输入图像描述

创建基于表单的登录时,请确保使用cookie或SSL会话信息维护会话。

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

摘要式身份validation

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

参考文献:

  • 如何保护我的Web应用程序
  • 保护Web应用程序
  • 保护Java EE 5 Web应用程序
  • 在部署描述符中声明安全性要求
  • 客户端证书认证

尝试使用servletfilter,无需配置JAAS和其他人员

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

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