Tomcat BASIC基本验证

Tomcat 的 BASIC 基本验证是一种常见的验证方式,但这种验证的安全度不高,它的验证不同于表单类的验证,做法也很简单,主要用于 Web 方面的验证。

当将 Web 应用的 web.xml 文件中的 <auth-method> 元素设置为 BASIC 时,表明应用使用的是基本验证。

当每次浏览器请求受保护的 Web 应用资源时,Tomcat 都会使用 HTTP 基本验证向浏览器索取用户名和密码(浏览器以页面弹窗的方式提示用户输入用户名和密码)。

示例

创建 Web 项目

可以使用 IDEA、Eclipse 等工具创建一个 Web 项目(当然也可以手动创建),项目的的结构如下图:

其中,index.jsp 页面为 Web 应用的主页面,需要用户登录授权后才能访问。而 web.xml 是 Web 应用的配置文件。

添加 index.jsp 页面

index.jsp 页面内容如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta charset="UTF-8">
    <title>DEMO</title>
</head>
<body>
    <h1>BASIC 基本验证</h1>
</body>
</html>

web.xml 配置

web.xml 文件内容如下:

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
    <display-name>Archetype Created Web Application</display-name>

    <security-constraint>
        <display-name>default</display-name>
        <!-- 需要限制访问的资源子集 -->
        <web-resource-collection>
            <web-resource-name>all files</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <!-- 指定可以访问该资源集合的用户角色,这里指定为 JAAS 中的角色 -->
        <auth-constraint>
            <role-name>manager-gui</role-name>
        </auth-constraint>
        <!-- 用来显示怎样保护在客户端和Web容器之间传递的数据 -->
        <!-- NONE 不需要传输保证 -->
        <!-- INTEGRAL 服务器和客户端之间的数据必须以某种方式发送,而且在传送中不能改变 -->
        <!-- CONFIDENTIAL 传输的数据必须是加密的数据 -->
        <user-data-constraint>
            <transport-guarantee>NONE</transport-guarantee>
        </user-data-constraint>
    </security-constraint>

    <!-- 配置登录方式为 form 方式 -->
    <login-config>
        <!-- 指定验证方式 -->
        <auth-method>BASIC</auth-method>
    </login-config>

</web-app>

注意,验证相关的配置见 <security-constraint> 和 <login-config> 元素的注释。其中,<role-name> 元素中设置的角色来源 Tomcat 领域配置的角色,如果配置使用 UserDatabase 领域,则来源 tomcat-users.xml 文件。如果配置使用 JAASRealm 领域,则来源我们注册的 Subject。

部署 Web 应用

将该 Web 应用打包成 war 包的方式去部署运行 Web 应用,或者直接通过 IDEA 内置 Tomcat 功能运行该 Web 应用。

运行成功后,使用浏览器访问项目 index.jsp 页面。如下图:

由于我们访问了私有资源,浏览器弹出密码输入框,要求我们输入用户名和密码。如果用户名和密码正确,则验证成功,跳转到主页。

为了进一步了解 Basic 基础验证,我们可以打开浏览器开发工具(快捷键 F12),选择 “网络” 选项卡,重新进行登录。你会发现我们输入的登录信息是通过 HTTP 的 Authorization 请求头将用户名和密码传递给 Tomcat。如下图:

其中,“Authorization: Basic dG9tY2F0OmFhYWFhYQ==” 就是登录信息,使用 Base64 对 “dG9tY2F0OmFhYWFhYQ==” 进行解码,解码后为 “tomcat:aaaaaa”。如下图:

从上面可知,BASIC 基本验证几乎是通过明文形式传递用户名和密码,这是非常不安全的。

可能有的读者会问,你上面输入的用户名(tomcat)和密码(aaaaaa)是哪里来的?这些用户名和密码是配置在 tomcat-users.xml 文件中的。如下:

(1)在 server.xml 文件中配置 tomcat 使用 UserDatabase 领域

(2)在 tomcat-users.xml 文件中配置用户和角色,如下:

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
    <role rolename="manager-gui"/>
    <role rolename="manager-script"/>
    <role rolename="manager-jmx"/>
    <role rolename="manager-status"/>
    <role rolename="admin-gui"/>
    <user username="tomcat" password="aaaaaa" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui"/>
</tomcat-users>

上面配置中,tomcat 用户拥有 manager-gui、manager-script、manager-jmx、manager-status 和 admin-gui 角色。

如果我们在 web.xml 文件中 <role-name> 元素中设置的角色在领域中没有匹配的角色,会怎么样呢?直接报 “HTTP Status 403 - Access to the requested resource has been denied” 错误。如下图:

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号