2014-07-14 20 views
0

我想在運行於tomcat上的Servlet中使用response.sendRedirect,它接收來自Apache服務器的瀏覽器請求。所以,任何重定向都會用'localhost:8080'代替'ip.ip.ip.ip.ip'或'someurl.com'部分url(據我所知,這是因爲tomcat將請求源標識爲apache服務器地址) 。 request.getRequestURL也受此問題的影響。有沒有辦法解決這個問題,而不寫回應JavaScript塊,實際上應該做重定向?Servlet重定向不能與Apache Tomcat + Apache服務器結合使用

+0

顯示重定向的代碼。 – Stefan

回答

0

簡單的解決方案: 在屬性中配置基礎URL(從瀏覽器的角度來看),然後將其用作重定向的基礎URL。在這種情況下,你可以使用類似:

response.sendRedirect(baseURLproperty + request.getRequestURI() + "?" + request.getQueryString()) 

更復雜的解決方案: 由於您使用Apache作爲反向代理,你可以配置它來添加自定義請求頭與原來的URL。看看:http://httpd.apache.org/docs/2.2/mod/mod_proxy.html

+0

對不起,但是Web應用程序可以在幾個不同的位置運行,所以URL地址可能不同(我更喜歡找到正確的解決方案,只是爲了使代碼更清晰)。我發現臨時解決方案從它獲取request.getHeader(「referer」)和URL的「root」部分,但只有當我從應用程序中的一個頁面重定向到其他頁面時,這纔會起作用。關於代理 - 這個Web應用程序中有很多依賴於當前設置,我不能冒險改變它們(所以我需要Java代碼解決方案)。 – user3628678

+0

注意那個安全含義!頭部很容易被欺騙/僞造,並可能導致各種利用**「開放重定向」漏洞的攻擊**嘗試在執行重定向之前根據有效值列表驗證用戶輸入。 – DavidC

相關問題