12.1 身份验证和授权

12.1 身份验证和授权

认证是检验某人真的是他自称的那个人的过程。在一个Servlet/JSP应用程序中,**身份验证一般通过检查用户名密码是否正确**。
授权是检查该级别的用户是否具备访问权限。它适用于包括多个区域的应用程序,其中用户可以利用这个应用程序的部分模块,但是其他模块就没有权限。
例如,一个在线商店可被划分成的一般部分(用于一般公众浏览和搜索产品)、买家部分(注册用户下订单)和后台管理部分(适用于管理员)。这三者中,后台管理部分需要访问的最高权限。管理员用户不仅需要进行身份认证,他们还需要获得后台管理部分的权限。
访问级别通常被称为角色。在部署一个Servlet/JSP应用程序时可以方便地通过模块分类和配置,使得每个模块只有特定角色才能访问。这是通过在部署中声明安全约束描述符完成的。换句话说,就是声明式安全。在这个范围的另一端,内容限制是通过编程实现检验用户名和密码与数据库中存储的用户名和密码对是否匹配

大多数ServletJSP应用程序的身份验证授权首先要验证用户名和密码与数据库表是否一致。一旦验证成功,可检查另一个授权在同一个表中存储的用户名和密码的表或字段。

声明式安全

声明式安全的优点

**使用声明式安全可让您的编程更简洁,因为``Servlet/JSP容器负责身份验证和授权过程**。此外,Servlet/JSP容器配置数据库来验证你已经在应用程序中使用。最重要的是,使用声明式身份验证的用户名和密码可在被发送到服务器之前由浏览器对其加密后再发送给服务器。

声明式安全的缺点

声明式安全的缺点是,支持数据加密的身份验证方法只能使用一个默认登录对话框不能对界面和操作进行个性化定制。这个原因就足以让人放弃声明式安全。声明性安全的唯一方法是允许使用一个自定义的HTML表单,不幸的是数据传输不加密。

声明式安全的应用场景

Web应用程序的某些部分,如管理模块,是不面向客户的,所以登录表单的外观是没有关联的。在这种情况下,声明式安全仍然被使用

声明式安全有趣的部分当然就是安全约束不编入Servlet了。相反,它们在应用程序部署时声明在部署描述符中。因此,它具有相当大的灵活性来确定用户和角色对访问的应用程序或部分模块的权限。

如何使用声明式安全

要使用声明式安全,首先定义用户和角色。根据您所使用的容器,您可以将用户和角色信息存储在一个文件或数据库表中,然后,您对应用程序中的资源或集合施加约束。

现在,您如何不通过编程来验证用户?你会发现后面的答案在于HTTP而不是Servlet规范。