Как получить URL браузера в веб-приложении Apache-Tomcat? - PullRequest
3 голосов
/ 13 апреля 2011

Я настроил свое веб-приложение, используя соединитель Apache-Tomcat через mod_proxy - см. Ниже.

<IfModule mod_proxy.c>
ProxyPass /myapp http://127.0.0.1:8080/myapp
ProxyPassReverse /myapp http://127.0.0.1:8080/myapp
</IfModule>

Кроме того, я использую субдомены для прямой идентификации клиентов путем чтения URL-адреса - пример приведен ниже.

Тип клиента1

http://client1.mydomain.com/myapp

Тип клиента2

http://client2.mydomain.com/myapp

Теперь я хочу прочитать URL и разобрать имя клиента (client1 или client2). Остальная часть моего веб-приложения определяется тем, кто является клиентом (конечно, после аутентификации). Но проблема в том, что когда я пытаюсь получить URL с помощью getRequestURL HttpServletRequest, я получаю http://127.0.0.1:8080/myapp вместо client1.mydomain или client2.mydomain. Я полагаю, это связано с тем, что Apache используется в качестве основного диспетчера, а запрос к Apache httpd перенаправляется на локальный хост Tomcat.

Я не хочу изменять структуру URL (например, client1.mydomain.com/client1) и не хочу запрашивать у пользователя информацию о клиенте через пользовательский интерфейс. Как мне этого добиться?

1 Ответ

3 голосов
/ 28 апреля 2011

Я решил эту проблему с помощью коннектора AJP вместо mod_proxy.

<Location /myapp>
ProxyPass ajp://localhost:8009/myapp
ProxyPassReverse ajp://localhost:8009/myapp
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
</Location>

Коннектор AJP перенаправил запрос от apache на tomcat с сохранением URL браузера (в то время как mod_proxy изменил его на localhost: 8080 / myapp) иследовательно, я смог прочитать и проанализировать имя клиента из него.

Теперь я могу отображать данные, специфичные для клиента, фактически не запрашивая у пользователя его / ее имя клиента.

...