Tomcat FORM 表单验证

Tomcat 的表单验证要求用户自己实现登录页面,并且提供用户名和密码。

当 web.xml 文件中的 <auth-method> 元素设置为 FORM 时,表明应用使用的是表单验证。当用户请求 Web 应用程序受保护的资源时,表单验证会跳转至配置的登录页面。当登录失败时,表单验证会跳转至错误页面。

示例

创建 Web 项目

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

其中:

  • index.jsp 为 Web 应用的主页面,需要用户登录授权后才能访问。

  • login.jsp 为 Web 应用的登录页面。

  • error.jsp 为 Web 应用的错误页面。

  • web.xml 为 Web 应用的配置文件。

登录页

login.jsp 文件内容如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>

<form method="post" action="j_security_check">
    <p>
        用户名:<input type="text" name="j_username" />
    </p>
    <p>
        密 码:<input type="password" name="j_password" />
    </p>
    <p>
        <button type="submit">登录</button>
    </p>
</form>

</body>
</html>

注意:登录表单的 method 必须为 post,action 必须是 j_security_check,用户名的 name 必须为 j_username,密码的 name 必须为 j_password。

主页

index.jsp 文件内容如下:

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

错误页

error.jsp 文件内容如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta charset="UTF-8">
    <title>错误</title>
</head>
<body>
    <p>用户名/密码不正确,登录失败!</p>
</body>
</html>

Web 配置文件

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>
        <!-- 指定可以访问该资源集合的用户角色 -->
        <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>

    <!-- 表单方式验证 -->
    <login-config>
      <auth-method>FORM</auth-method>
      <form-login-config>
        <form-login-page>/login.jsp</form-login-page>
        <form-error-page>/error.jsp</form-error-page>
      </form-login-config>
    </login-config>
    
    <security-role>
        <role-name>manager-gui</role-name>
    </security-role>
    
</web-app>

其中,将 <auth-method> 配置为 FORM 表示表单验证,<form-login-page> 配置登录页面路径,<form-error-page> 配置错误页面路径。

配置用户密码

打开 tomcat 的 tomcat-users.xml 配置文件,添加一个名为 tomcat 的用户,用户密码使用明文。如下:

<?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>

部署 Web 应用

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

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

输入用户名和密码点击“登录”按钮进行登录,如果密码验证通过,则跳转到主页。如下图:

通过浏览器调试工具,可以看到请求 j_security_check 接口的内容为 “j_username=tomcat&j_password=aaaaaa”。

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