Есть ли способ определить из HttpServletRequest, выполняется ли запрос через соединитель Apache AJP или напрямую

#servlets #tomcat9

#сервлеты #tomcat9

Вопрос:

Есть ли способ определить из HttpServletRequest, выполняется ли запрос через соединитель Apache AJP или напрямую

    <Connector port="8443"
               scheme="https" secure="true" enableLookups="false" disableUploadTimeout="true"
               maxHttpHeaderSize="8192" maxThreads="8000" acceptCount="3000" SSLEnabled="true"
               maxConnections="10000" protocol="org.apache.coyote.http11.Http11NioProtocol">
             ...
    </Connector>

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" secretRequired="false" />
  

Проблема, которую мы имеем, заключается в том, что некоторые пользователи получают доступ к tomcat через Интернет, доступ к которому

веб-адрес: 8443 —> указывает брандмауэром на интрасеть apache: 443 —> Соединитель AJP для tomcat: 8009

когда в интрасети администратор клиента сопоставил веб-адрес с котом, чтобы

веб-адрес: 8443 —> tomcat: 8443

таким образом, URL-адрес broswer тот же веб-адрес: 8443, поэтому из URL-адреса невозможно определить, передается ли он через apache или напрямую в tomcat

Ответ №1:

Нашел способ, установив заголовок в apache

RequestHeader set PROXY_HEADER APACHE

затем определите PROXY_HEADER в HttpServletRequest.getHeaders