实施 Tomcat 自定义 Valve

aja*_*jax 2 tomcat6 tomcat-valve

valve我正在尝试在 Tomcat 中实现一个自定义,例如MyValveextends BaseValve。我创建了项目的 jar 并将其添加到Tomcat\lib文件夹中。

下一步是配置server.xmlcontext.xml。我都尝试过。但我的阀门类别没有被检测到。

有人可以让我知道创建阀门并使用它的步骤吗?

谢谢

Kee*_*asa 6

问题是创建自定义阀门并使用它所需的步骤。因此,让我一步步解释它,以便其他人也能利用它。对于我的示例,我将使用Java Maven 项目。(Git 项目

第 1 步:打开一个新的或现有的 Maven 项目(您也可以从上面的存储库克隆)。

步骤 2:将以下依赖项添加到文件中pom.xml

<dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-catalina</artifactId>
            <version>7.0.85</version>
            <scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

步骤 3:在src/main/java路径下,创建一个包并创建一个新的 Java 类:(TomcatValve.java可以是任何名称)。逐个类地扩展这个类ValueBase

步骤 4:有了这个,您将必须实现它的invoke方法。整个类看起来类似于:

import java.io.IOException;
import java.util.Enumeration;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.Response;
import org.apache.catalina.valves.ValveBase;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;

/**
 * @author Keet Sugathadasa
 */
public class TomcatValve extends ValveBase {
    private static final Logger logger = Logger.getLogger(TomcatValve.class.getName());

    public void invoke(Request request, Response response) throws IOException, ServletException {
        HttpServletRequest httpServletRequest = request.getRequest();

        Enumeration<String> headerNames = httpServletRequest.getHeaderNames();

        logger.info("Receiving request");

        while (headerNames.hasMoreElements()) {
            String header = headerNames.nextElement();
            logger.log(Level.INFO, "Header --> {0} Value --> {1}", new Object[]{header, httpServletRequest.getHeader(header)});
        }

        getNext().invoke(request, response);
    }
}
Run Code Online (Sandbox Code Playgroud)

第 5 步:打开终端,然后运行mvn install​​. 现在在target/文件夹中,应该已经构建了 jar。

第 6 步:将此 jar 复制到${TOMCAT_HOME}/lib${CATALINA_HOME}/lib文件夹。这通常是在/usr/local/apache-tomcat9/lib.

步骤 7:转到${TOMCAT_HOME}/conf${CATALINA_HOME}/conf文件夹并将以下行添加到server.xml

班级名称:TomcatValve

包裹名字:com.keetmalin.tomcat

<Valve className="com.keetmalin.tomcat.TomcatValve"/>
Run Code Online (Sandbox Code Playgroud)

步骤 9:转到${TOMCAT_HOME}/bin${CATALINA_HOME}/bin文件夹并在终端中运行以下命令:

./catalina.sh run
Run Code Online (Sandbox Code Playgroud)

第 10 步:接下来,您的 Tomcat 服务器将启动。打开浏览器并转到http://localhost:8080/并返回终端。您将看到正在打印日志。现在,您可以做任何您想做的事情,而不是打印日志。希望能帮助到你!

在此输入图像描述