Внедрение Tomcat Custom Valve - PullRequest
       22

Внедрение Tomcat Custom Valve

0 голосов
/ 04 июля 2011

Я пытаюсь реализовать пользовательский valve в Tomcat, скажем MyValve, который расширяет BaseValve. Я создал флягу проекта и добавил ее в папку Tomcat\lib.

Следующим шагом является настройка server.xml или context.xml. Я попробовал оба. Но мой класс клапанов не обнаруживается.

Может кто-нибудь, пожалуйста, дайте мне знать, как создать клапан и использовать его.

Спасибо

Ответы [ 3 ]

1 голос
/ 02 июня 2019

Вопрос в том, какие шаги необходимы для создания пользовательского клапана и его использования. Итак, позвольте мне объяснить это шаг за шагом, чтобы кто-то еще также мог воспользоваться этим. Для моего примера я буду использовать Java Maven Project . ( Git Project )

Шаг 1 : Откройте новый или существующий проект Maven (вы также можете клонировать из вышеупомянутого репозитория).

Шаг 2 : Добавьте следующую зависимость в файл pom.xml.

<dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-catalina</artifactId>
            <version>7.0.85</version>
            <scope>provided</scope>
</dependency>

Шаг 3 : в поле src/main/java path создайте пакет и создайте новый класс Java: TomcatValve.java (может быть любым именем). Расширьте этот класс на ValueBase class.

Шаг 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);
    }
}

Шаг 5 : открыть терминал и запустить mvn install. Теперь в папке target/ должен быть собран jar.

Шаг 6 : скопируйте эту банку в папку ${TOMCAT_HOME}/lib или ${CATALINA_HOME}/lib. Обычно это в /usr/local/apache-tomcat9/lib.

Шаг 7 : Перейдите в папку ${TOMCAT_HOME}/conf или ${CATALINA_HOME}/conf и добавьте следующую строку в server.xml:

Имя класса: TomcatValve

PackageName: com.keetmalin.tomcat

<Valve className="com.keetmalin.tomcat.TomcatValve"/>

Шаг 9 : Перейдите в папку ${TOMCAT_HOME}/bin или ${CATALINA_HOME}/bin и выполните следующую команду в терминале:

./catalina.sh run

Шаг 10 : Затем ваш сервер Tomcat запустится. Откройте браузер и перейдите на http://localhost:8080/ и вернитесь к терминалу. Вы увидите, что журналы печатаются. Теперь вместо печати журналов вы можете делать все, что пожелаете. Надеюсь, это поможет!

enter image description here

1 голос
/ 30 сентября 2011

Какую версию Tomcat вы используете?CATALINA_HOME\lib является правильным каталогом для Tomcat v6.x (и v7, я считаю).Если ваш клапан не поднимается, возможно, вы не редактируете файлы server.xml или context.xml в каталоге CATALINA_BASE.Вы используете Eclipse IDE или что-то подобное?Если это так, проверьте настройки сервера Tomcat, поскольку он копирует файлы XML из каталога CATALINA_HOME (установка) в каталог CATALINA_BASE (настроенный экземпляр).Эта проблема сбила меня с толку.

0 голосов
/ 17 сентября 2012

Я обнаружил, что создал jar-файл, содержащий файл java вместо файла класса с использованием netbeans.

Решение, которое работало для меня, состояло в том, чтобы создать jar с правильной структурой каталогов для пакета (MyValve.jar\org\apache\catalina\connector\) и вставить файл классов в этот каталог.Я поставил банку в том же месте (CATALINA_HOME\lib).

Я добавил запись в файл server.xml внутри раздела <Host>, например:

<Valve className="org.apache.catalina.connector.MyValve"
    classField="value">
...