您应该使用 Tomcat、Websphere、Glassfish 等 Servlet 容器提供的 JAAS 安全性。
默认情况下,这些容器支持以下身份验证类型:
HTTP 基本身份验证
指定 HTTP 基本身份验证要求服务器从 Web 客户端请求用户名和密码,并通过将用户名和密码与指定或默认领域中的授权用户数据库进行比较来验证用户名和密码是否有效。
当您未指定身份验证机制时,基本身份验证是默认设置。
使用基本身份验证时,会发生以下操作:
- 客户端请求访问受保护的资源。
- Web 服务器返回一个对话框,要求输入用户名和密码。
- 客户端将用户名和密码提交给服务器。4.\服务器在指定领域对用户进行身份验证,如果成功,则返回请求的资源。
下图显示了当您指定 HTTP 基本身份验证时会发生什么。
HTTP基本认证客户端与服务器之间HTTP基本认证的四个步骤图
基于表单的身份验证
基于表单的身份验证允许开发人员通过自定义 HTTP 浏览器呈现给最终用户的登录屏幕和错误页面来控制登录身份验证屏幕的外观。声明基于表单的身份验证时,会发生以下操作。
- 客户端请求访问受保护的资源。
- 如果客户端未经身份验证,则服务器将客户端重定向到登录页面。
- 客户端将登录表单提交给服务器。
- 服务器尝试对用户进行身份验证。
- 如果身份验证成功,则检查经过身份验证的用户的主体,以确保其处于有权访问资源的角色中。如果用户被授权,则服务器使用存储的 URL 路径将客户端重定向到资源。
- 如果身份验证失败,客户端将被转发或重定向到错误页面。
下图显示了当您指定基于表单的身份验证时会发生什么。
创建基于表单的登录时,请务必使用 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>
摘要式身份验证
与基本身份验证一样,摘要身份验证基于用户名和密码对用户进行身份验证。但是,与基本身份验证不同,摘要身份验证不会通过网络发送用户密码。相反,客户端发送密码和附加数据的单向加密哈希。尽管密码不会在线发送,但摘要式身份验证要求身份验证容器可以使用明文密码等效项,以便它可以通过计算预期的摘要来验证接收到的身份验证器。
参考: