标准表单身份验证 Java servlet

2023-11-27

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

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

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

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

我还读到j_安全检查,那是怎么回事?这是遗留方法吗?


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

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

  • BASIC
  • DIGEST
  • FORM
  • 客户证书

HTTP 基本身份验证

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

当您不指定身份验证机制时,基本身份验证是默认身份验证。

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

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

The below Figure shows what happens when you specify HTTP basic authentication. enter image description here

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

基于表单的身份验证

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

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

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

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>

摘要式认证

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

参考:

  • 如何保护我的 Web 应用程序
  • 保护 Web 应用程序的安全
  • 保护 Java EE 5 Web 应用程序的安全
  • 在部署描述符中声明安全要求
  • 客户端证书认证
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

标准表单身份验证 Java servlet 的相关文章

随机推荐

  • Numpy 或 SciPy 非均匀间距的导函数?

    我想知道 numpy 或 scipy 的库中是否有一种方法可以查找具有非均匀间距的值列表的数值导数 这个想法是输入与值相对应的时间戳 然后使用时间戳来查找数值导数 您可以使用 numpy 创建自己的函数 对于使用前向差异的导数 感谢 EOL
  • 如何正确获取 CGColor 的颜色分量

    我有一个黑色的 UILabel 我正在编写以下代码来获取黑色的组件 UIColor aColor aLabel textColor retain const CGFloat components CGColorGetComponents a
  • cURL:操作在 0 毫秒后超时

    cURL 给我错误 Operation timed out after 0 milliseconds with 0 out of 0 bytes received 特别是 0毫秒 部分很可疑 我的初始化代码 curl curl init r
  • 如何将参数(action.payload)传递给 ngrx/effects 中的服务?

    我是 ngrx 6 的新手 效果将侦听操作 LOAD COURSE DETAILS 并应使用 course id action payload 调用服务 但我收到错误 Action 类型中缺少属性 toFixed 但是 如果我执行 cons
  • 安装 ASP.NET 和 Web Tools 2015 后,Visual Studio 出现错误“对象引用未设置为对象的实例”

    安装 ASP NET 和 Web Tools 2015 RC1 更新 1 后 打开 ASP NET MVC 4 项目时出现以下错误 cshtml files 未将对象引用设置为对象的实例 即使我启动一个新的 ASP NET MVC 4 项目
  • Eclipse 中的 Egit 导入显示运行时错误

    我尝试制作一个非常简单的 hello world 在 Eclipse 中使用 Egit 导入 我没有发现任何证据表明该软件无法正常工作 在谷歌中没有发现错误 所以看起来我犯了一些我不知道的错误 我按照此处定义的步骤进行操作 http cra
  • 如何对字典中的所有值求和?

    假设我有一个字典 其中的键映射到整数 例如 d key1 1 key2 14 key3 47 是否有一种语法上简约的方法来返回值的总和d i e 62在这种情况下 正如您所期望的 sum d values
  • 将 UUID 与 LINQ to Entities 中的字符串进行比较会引发错误 [重复]

    这个问题在这里已经有答案了 编辑 这不是重复的 建议的 SO 链接希望我打电话ToString 但我正在运行 COUNT 并试图做一个比比较更大的事情ToString 不是正确答案 我正在尝试使用以下方式填充变量IF快捷方式 但当我运行它时
  • SSRS:根据参数值有条件隐藏列 - CSV 导出忽略

    我在 SSRS 2008 中有一个简单的基于表格的报告 有 10 列 每列都有一个相应的参数来确定是否应显示该列 我通过设置在设计模式下右键单击列标题时获得的 列可见性 选项来实现此目的 就我而言 我选择 根据表达式显示或隐藏 将表达式设置
  • Pod Init 没有创建 xcworkspace?

    我启动了一台新 Mac 运行 sudo gem install cocoapods 完成 Pod 初始化 Pod 文件已创建 但没有 xcworkspace 文件 使用 Xcode 9 3 任何帮助表示赞赏 尝试过 卸载 cocoapods
  • 使用 R 中的工具提示绘制县级数据

    我在 www betydb org 上看到了美国县级的交互式分区统计图 我想使用 R 重现类似的地图 我只想要地图和工具提示 不是不同缩放级别的所有图块 或者切换地图的能力 该地图当前创建于ruby 弹出窗口 左下角 查询 MySQL 数据
  • 如何自动更新 MS-Access 2007 应用程序

    我有一个与 MySql 服务器通信的前端 Access 2007 应用程序 我想要一个功能 用户计算机上的应用程序可以检测到网络上有新版本 这并不困难 并将最新版本下载到本地驱动器并启动它 有谁有任何知识或经验如何做到这一点 Thanks
  • 如何在xampp中启用curl? [复制]

    这个问题在这里已经有答案了 如何在xampp中启用curl 我的 PHP twitter 应用程序需要curl 函数 但在 XAMPP 中并未启用它 如何启用它 我没有找到这样做的选择 您必须修改 xampp 文件夹中的 php ini 文
  • 如何在 Verilog 中将长语句分成行

    例如 我有一个很长的声明 display input data x output data x result x input data output data result 如何在 Verilog 中将其变成单语句和多行 您需要分解引用的字
  • 启动一个即使在 IE 中也能正常运行的文件下载?

    我正在寻找有关从 Javascript 启动文件下载的最佳方法的更多想法 启动下载的最佳方式 有很多好的想法 可以总结一下 在 iframe 上设置 src 使用 window location replace 使用带有元刷新标题的页面 使
  • Codeigniter URL 在没有 index.php 的情况下无法工作

    我刚刚建立了一个新网站http www reviewongadgets com 但是URL渲染有问题 当我输入如下 URL 时 它不起作用并给出页面未找到错误http www reviewongadgets com latest mobil
  • C 结构体成员的默认值

    是否可以为某些结构成员设置默认值 我尝试了以下方法 但是会导致语法错误 typedef struct int flag 3 MyStruct Errors gcc o testIt test c test c 7 error expecte
  • 在seaborn中使用Unicode文本

    我想在 Seaborn 中使用 Unicode 文本 Python 2 7 我可以使用 Unicode 文本作为 matplotlib 的图块 例如 import matplotlib pyplot as plt from matplotl
  • 告诉 Puppeteer 打开 Chrome 选项卡而不是窗口

    如果我打开了现有的 Google Chrome 窗口 我想告诉 puppeteer 打开一个新选项卡而不是打开一个新窗口 有没有办法做到这一点 是否有一些选项或标志我可以传递给木偶师来完成此任务 I have const puppeteer
  • 标准表单身份验证 Java servlet

    使用 Java Servlet 进行表单身份验证的标准方法是什么 从现在开始 我自己使用简单的 POST HTML 表单实现了这一点 根据数据库检查发送的参数 如果存在 将 User 对象保存到 HttpSession 中 检查每个 Ser