【问题标题】:How to disable curly braces evaluation in URL passed to HttpServletResponse.sendRedirect如何在传递给 HttpServletResponse.sendRedirect 的 URL 中禁用花括号评估
【发布时间】:2016-05-30 10:46:36
【问题描述】:

我有一个 URL 缩短器,它应该将重定向(URL)发送到用户指定的 URL。 有时 URL 包含这样的花括号:http://example.com?someparam={something}

我在 Tomcat 服务器上的 Spring MVC 应用程序没有向客户端浏览器发送响应 302,而是给出了没有文本的错误 404。

显然这是在进行某种 URL 变量评估,我可以禁用它吗?我找不到有关此功能的文档。

【问题讨论】:

  • 我不确定它是否有效,因为我没有尝试过,但我认为您可以对您的网址进行编码
  • @PragnaniKinnera 编码成什么?只有 {} 应该被编码,而不是完整的 URL。如果是配置问题,我想避免自定义代码的麻烦。
  • 你应该使用 URL 编码器在你的域名后面编码 URL 字符串。
  • @PragnaniKinnera 1. 这不是我要求的配置解决方案。 2. 这样的编码会破坏一些其他的参数。最后,我将不得不编写一些好的单元测试代码来转义 {},我不想这样做,因为它可能是某个地方的配置标志。

标签: java spring-mvc tomcat servlets curly-braces


【解决方案1】:

这不是有效的 Google 搜索 URL http://google.com/{something}。应该是https://www.google.ca/search?q=http{302}

重点是搜索?q。在域名之后,您已经指定了您的服务名称,然后如果您想传递一些输入,则查询字符串。

当您执行 http://google.com/{something} 时,您确实没有任何资源或服务,因为 {something} 因此 404 是预期的输出。

HTTP 302 用于重定向,我不确定您为什么期待重定向。

URL 编码也无济于事,因为问题与资源/服务有关,如果不存在,您将得到 404。URL 编码并不是为了解决与 404 相关的问题。

【讨论】:

  • 这与谷歌无关。由于大括号的存在,我的应用程序给出了错误 404 而不是 302 重定向到谷歌。
  • 您能否对客户端传递的内容、您的服务器在做什么进行更多解释。您必须了解 404 意味着服务器确实拥有该资源,无论是您的服务器还是重定向到 Google,如果资源存在,则 404 不会发生,然后 302 会发生..如果资源本身首先不存在,您不能指望得到 302..请在您的问题中添加更多信息,从客户端开始直到您的重定向..
  • 我使用 response.sendRedirect(URL) 并期望服务器响应 302 重定向到客户端。如果 URL 是 http://example.com/param=whatever 一切正常,我会得到 302。如果 URL 是 http://example.com/param={whatever} - 我会得到 404 响应客户端。我的服务器绝对不应该关心最后的资源是否存在。这是来自 example.com 的响应问题,客户端浏览器将发送下一个请求。
  • 你最好给出准确的 URL,因为http://example.com/param=whatever 不是一个有效的 URL ..
  • 它是否有效并不重要,真的。不管它是什么,浏览器都应该被重定向到它,这样它就会进一步发现......
【解决方案2】:

我知道这是一个老问题,但我认为 OP 正在寻找一种方法来防止 Spring 在重定向 URL 中进行变量替换

我遇到了完全相同的问题,解决方法是使用 RedirectView 在 RedirectView 中你可以设置 setExpandUriTemplateVariables(false)

这使它重定向到完全给出的 url,而没有 Spring 尝试替换其中的任何内容

这是代码的样子

        RedirectView redirect = new RedirectView(redirectUrl);
        redirect.setExpandUriTemplateVariables(false);
        return new ModelAndView(redirect);

希望有帮助

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 2012-01-10
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多