Java EE получает порт контейнера сервлета - PullRequest
1 голос
/ 22 февраля 2011

Я хочу программно получить порт контейнеров сервлетов, на котором развернуто мое приложение Java EE. Я предполагал, что что-то будет в бинах JMX, но я не могу ничего найти.

И прежде чем кто-либо скажет захватить порт из HttpRequest или HttpResponse, следует отметить, что этот процесс выполняется за сервлетом и не взаимодействует с запросами или ответами.

Ответы [ 2 ]

3 голосов
/ 22 февраля 2011

Одним из возможных "хаков" может быть синтаксический анализ server.xml во время выполнения и определение настроенного порта.

Но, похоже, есть способ сделать это и с использованием JMX / MBeans.

JMX Console listening to Tomcat's PID

1 голос
/ 03 апреля 2011

У меня возникла острая необходимость извлечь порт Tomcat из запроса. Так что я могу сравнить и сказать, если запрос сервлета от порта tomcat http://localhost:8080 или от порта Apache http://localhost/

Делая это, я могу убедиться, что запрос обрабатывается только при строгом использовании порта tomcat и отклонении через порт apache. Это может помочь настроить конфигурацию безопасности, чтобы запрос не разрешал доступ из внешнего мира через apache. Порт Tomcat доступен только в локальной сети.

Метод заключается в том, чтобы создать клапан для кота (если вы знаете, что это такое), реализующий org.apache.catalina.valves.ValveBase. Этот интерфейс предоставляет org.apache.catalina.connector.Request в качестве аргумента.

По запросу:

using request.getConnector().getPort() which returns 8080. Then say.
if ( request.getServerPort() != request.getConnector().getPort() ) {
    response.getWriter().print("<span>access denied</span>");
} else {
    getNext().invoke(request, response);
}
...