【问题标题】:Servlet redirection not working with combination of Apache Tomcat + Apache serverServlet 重定向不适用于 Apache Tomcat + Apache 服务器的组合
【发布时间】:2014-07-14 14:52:15
【问题描述】:

我正在尝试在运行在 tomcat 上的 servlet 中使用 response.sendRedirect,该 servlet 从 apache 服务器接收来自浏览器的请求。因此,任何重定向都会将 url 的 'ip.ip.ip.ip' 或 'someurl.com' 部分替换为 'localhost:8080' (据我所知,这是因为 tomcat 将请求源标识为 apache 服务器地址) . request.getRequestURL也受到这个问题的影响。有没有什么办法可以解决这个问题,而无需编写响应实际上应该进行重定向的 javascript 块?

【问题讨论】:

  • 显示重定向代码。

标签: apache tomcat servlets


【解决方案1】:

简单的解决方案: 在属性中配置基本 url(从浏览器的角度来看),然后将其用作重定向的基本 url。在这种情况下,您可以使用类似:

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

更复杂的解决方案: 由于您使用 apache 作为反向代理,您可以将其配置为使用原始 URL 添加自定义请求标头。看:http://httpd.apache.org/docs/2.2/mod/mod_proxy.html

【讨论】:

  • 抱歉,Web 应用程序可以在几个不同的位置运行,因此 URL 地址可能不同(我更喜欢找到正确的解决方案,只是为了让代码更简洁)。我找到了从中获取request.getHeader("referer") 和 URL 的“root”部分的临时解决方案,但这仅在我从应用程序中的一个页面重定向到另一个页面时才有效。关于代理 - 这个 Web 应用程序中有很多内容取决于当前设置,我不能冒险更改它们(所以我需要 Java 代码解决方案)。
  • 注意安全隐患!标头很容易被欺骗/伪造,并可能导致利用“开放重定向”漏洞的各种攻击。在执行重定向之前尝试根据有效值列表验证用户输入。跨度>
猜你喜欢
  • 2016-12-30
  • 2017-04-12
  • 2016-12-30
  • 2011-06-07
  • 2017-06-03
  • 1970-01-01
  • 2013-09-02
  • 2021-07-26
  • 2010-11-15
相关资源
最近更新 更多