【问题标题】:How to correctly redirect a URL which does NOT start with HTTP or HTTPS protocols?如何正确重定向不以 HTTP 或 HTTPS 协议开头的 URL?
【发布时间】:2013-07-16 06:53:26
【问题描述】:

我正在覆盖HttpServletResponseWrapper.sendRedirect() 方法。通常,重定向 URL 将以 httphttps 开头。但是我们确实遇到了一些这样的 URL:

//www.google.com.

当您在 js 中将此 URL 分配给 window.location 时,此 URL 有效。但是,如果我们尝试重定向此 URL,它将失败。因为它会一直认为是相对路径。

你知道如何正确重定向这样的网址吗?

【问题讨论】:

  • 根据我的经验,您需要地址的“协议”部分。如果您错过它,浏览器会更宽容(因此为什么在新窗口中打开可以正常工作)。您可以查看 firefox(或类似的)的来源,看看他们如何解决缺少协议的问题。或者测试重定向链接中的协议,如果丢失,则在新窗口中打开。
  • 你可以参考这个:stackoverflow.com/questions/8951423/…

标签: java url redirect


【解决方案1】:

您可以依赖以下内容。

http://docs.oracle.com/javaee/1.2.1/api/javax/servlet/ServletRequest.html#getScheme()

这会告诉你是不是http/https

【讨论】:

  • 嗨,开发者,我如何使用这个 ServletRequest.getScheme() 检查 //www.google.com ?
【解决方案2】:

为了处理相对 URL(即未指定架构或主机的 URL),您需要从触发处理的 ServletRequest 复制缺失的部分。 Java 类URL 有一个辅助方法:

URL requestURL = new URL( request.getRequestURL() );
URL redirectURL = new URL( requestURL, "//www.google.com" );

【讨论】:

    【解决方案3】:

    参考this question,无协议链接默认使用当前协议。

    因此您可以简单地使用当前页面的协议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-27
      • 2017-11-19
      • 2012-12-19
      • 1970-01-01
      • 1970-01-01
      • 2011-02-22
      相关资源
      最近更新 更多