Java 如何正确重定向不以HTTP或HTTPS协议开头的URL?
我正在覆盖Java 如何正确重定向不以HTTP或HTTPS协议开头的URL?,java,url,redirect,Java,Url,Redirect,我正在覆盖HttpServletResponseWrapper.sendRedirect()方法。通常,重定向url将以http或https开头。但我们确实遇到了如下URL: //www.google.com 当您将此URL分配给js中的window.location时,此URL有效。但是,如果我们尝试重定向此URL,它将失败。因为它总是把它看作一个相对的路径。 您知道如何正确重定向这样的URL吗?您可以依赖以下内容 这将告诉您是否是http/https来处理相对URL(即不指定架构或主机的U
HttpServletResponseWrapper.sendRedirect()
方法。通常,重定向url将以http
或https
开头。但我们确实遇到了如下URL:
//www.google.com
当您将此URL分配给js中的window.location
时,此URL有效。但是,如果我们尝试重定向此URL,它将失败。因为它总是把它看作一个相对的路径。
您知道如何正确重定向这样的URL吗?您可以依赖以下内容
这将告诉您是否是http/https来处理相对URL(即不指定架构或主机的URL),您需要从触发处理的
ServletRequest
复制缺少的部分。Java类URL
有一个帮助器方法:
URL requestURL = new URL( request.getRequestURL() );
URL redirectURL = new URL( requestURL, "//www.google.com" );
参考,默认情况下,没有协议的链路将使用当前协议
因此,您可以简单地使用当前页面的协议。根据我的经验,您需要地址的“协议”部分。如果你错过了,浏览器会更宽容(因此为什么在新窗口中打开可以正常工作)。您可以查看firefox(或类似产品)的源代码,了解它们如何解决缺少协议的问题。或者在重定向链接中测试协议,如果缺少,则在新窗口中打开。您可以参考以下内容:您好,Dev,如何使用此ServletRequest.getScheme()检查//www.google.com?