标准表单身份验证Java servlet

Mah*_*oni 10 java security authentication servlets jetty

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

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

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

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

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

Ram*_*PVK 14

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

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

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

HTTP基本身份验证

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

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

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

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

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

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

基于表单的身份验证

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

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

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

在此输入图像描述

创建基于表单的登录时,请确保使用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>
Run Code Online (Sandbox Code Playgroud)

摘要式身份验证

与基本身份验证一样,摘要身份验证根据用户名和密码对用户进行身份验证.但是,与基本身份验证不同,摘要式身份验证不会通过网络发送用户密码.相反,客户端发送密码和附加数据的单向加密哈希.尽管密码未在金属丝送出,摘要认证要求明文口令当量提供给所述认证容器,以便它可以通过计算预期的摘要验证接收到的认证器.

参考文献: