您应该使用 Tomcat、Websphere、Glassfish 等 Servlet 容器提供的 JAAS 安全性。
默认情况下,这些容器支持以下身份验证类型:
HTTP 基本身份验证
指定 HTTP 基本身份验证要求服务器从 Web 客户端请求用户名和密码,并通过将用户名和密码与指定或默认领域中的授权用户数据库进行比较来验证用户名和密码是否有效。
当您不指定身份验证机制时,基本身份验证是默认身份验证。
使用基本身份验证时,会发生以下操作:
- 客户端请求访问受保护的资源。
- Web 服务器返回一个对话框,请求用户名和密码。
- 客户端将用户名和密码提交给服务器。
4.\服务器对指定领域中的用户进行身份验证,如果成功,则返回所请求的资源。
The below Figure shows what happens when you specify HTTP basic authentication.
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>
摘要式认证
与基本身份验证一样,摘要身份验证根据用户名和密码对用户进行身份验证。但是,与基本身份验证不同,摘要身份验证不会通过网络发送用户密码。相反,客户端发送密码和附加数据的单向加密哈希。尽管密码不是通过网络发送的,但摘要身份验证要求身份验证容器可以使用明文密码等效项,以便它可以通过计算预期摘要来验证收到的身份验证器。
参考:
- 如何保护我的 Web 应用程序
- 保护 Web 应用程序的安全
- 保护 Java EE 5 Web 应用程序的安全
- 在部署描述符中声明安全要求
- 客户端证书认证