Я использую response.sendRedirect() для перенаправления пользователя на главную страницу после успешной аутентификации пользователя. Это делается для того, чтобы избежать «Локальной переадресации уязвимости».Как воссоздать проблему sendRedirect - изменение HTTPS на HTTP
Однако из-за вышеуказанного изменения один из моих клиентов сталкивается с проблемой, когда его запрос HTTPS преобразуется в HTTP (с IP-адресом в URL-адресе). Причина такой же объясняется здесь
http://geekexplains.blogspot.in/2008/06/https-becoming-http-in-case-of.html
Теперь, как я могу воспроизвести проблему (или настройки среды), так что я могу проверить мое исправление. Я думал, что могу воспроизвести, настроив сервер Apache infront для tomcat, но я не могу воспроизвести вышеупомянутую проблему.
В Apache httpd.conf я имею ниже записей
ProxyPass /myconsole ajp://localhost:8009/myconsole
ProxyPassReverse /myconsole ajp://localhost:8009/myconsole
Accessed приложение, как,
http://myapacheserver/myconsole/Login.jsp
После успешного входа в систему, я получаю перенаправлены
http://myapacheserver/myconsole/Home.jsp
I я ожидаю перенаправления на IP-адрес. что-то вроде http://10.32.24.14:8080/myconsole/Home.jsp
.
В клиентской среде он перенаправляется на IP-адрес сервера приложений (tomcat).
Любой указатель будет полезен.
Благодаря
Примечание: Для тех, кто заинтересован, я строю полный URL, получив первую часть URI из конфигурационного файла.
//Get the LB URI part. Eg: https://dev.loadbalancer.com/
String loadBalancerURI = getConfig().getLoadBalancerRequestURI();
String redirectURL = request.getContextPath() + "/Home.jsp";
//Prepend the LoadBalancer URI with redirect URI
if(loadBalancerURI != null)
{
redirectURL = loadBalancerURI + "/" + redirectURL;
}
//redirect to home page
response.sendRedirect(redirectURL);
return;
Edit: Более подробную информацию о настройке. У клиента есть балансировщик нагрузки F5, где SSL-трафик останавливается, а затем есть Apache Reverse Proxy-серверы, который прокси-сервер для пула серверов tomcat. Проблема в том, что мы перенаправляем URL-адрес перенаправления для Tomcat Servers. Мы ожидаем, что URL-адрес балансировки нагрузки будет перенаправлен на URL-адрес перенаправления.
Возможно ли сделать некоторые изменения на сервере Apache, который будет переписывать URL-адрес в HTTP-заголовке в ответе от Tomcat?
getLoadBalancerRequestURI() - мой собственный метод, который возвращает значение из файла конфигурации. Да, я мог бы создать URL-адрес потока на основе запросаURL, но не будет ли URL-адрес запроса http? поскольку запрос, полученный Tomcat, находится в протоколе HTTP? Я ищу, как воспроизвести проблему, с которой столкнулся клиент, где они использовали SSLOffloader для преобразования протокола HTTPS в HTTP. – param83
Я не знаю о вашем обратном прокси, но с jkconnector запрос, который получает сервер Tomcat, является исходным запросом пользователя в отношении request.getRequestURL(). Я получаю доменное имя моего DMZ-сервера, а не IP-адрес моего сервера tomcat. И я использовал его, чтобы определить, пришел ли пользователь через https или нет. – developerwjk
Итак, getRequestURL() даст мне имя машины балансировки нагрузки (на самом деле получен оригинальный запрос). Однако почему почему sendRedirect() помещает ip-адрес в URL-адрес перенаправления? Кроме того, я изо всех сил пытаюсь настроить среду, в которой я вижу эту проблему. Клиент использует продукт BIG-IP (F5). Конечно, я не могу использовать его в своей тестовой среде. Есть ли лучший способ имитировать настройку развертывания клиента? – param83