gpt4 book ai didi

java - 以斜杠结尾的 Spring 4 路径参数

转载 作者:行者123 更新时间:2023-11-28 22:16:11 25 4
gpt4 key购买 nike

我正在尝试让我的 Spring 4 应用程序允许以转义斜杠结束的路径参数。

我得到的@RequestMapping是:

@RequestMapping("/{externalSystemId}/{externalRequestId}/events")

我调用的 URL 是 /dummy/ab%2F/events。因此“externalRequestId”是具有尾随编码斜线的那个。

我已经到了处理程序被正确调用的地步,并且路径段中间的转义斜杠起作用了——例如/dummy/ab%2Fcd/events,但不是最后。

到目前为止我做了什么:

  • 为 Tomcat 添加了系统属性:
    • -Dorg.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH=true
    • -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
  • UrlPathHelper 的自定义扩展,将 getServletPath 替换为仅返回 request.getRequestURI()
  • 配置 UrlPathHelper:
    • urlDecode = false
    • removeSemicolonContent = false
  • mvc:annotation-driven 中使用来自 mvc:path-matching 的 UrlPathHelper

我完全不知道下一步该去哪里。我什至一直在通过 Spring 和 Tomcat 进行调试以尝试解决这个问题,但我被难住了。它看起来是因为 UrlPathHelper.getPathWithinServletMapping() 正在调用 request.getPathInfo(),并且它返回的是剥离了 %2F 的路径出去。而这又是因为 Tomcat 中的其他地方——我现在丢失了窗口——它已将 %2F 解码为/,然后用“/”代替现在存在的“//”。

这感觉应该比较简单,所以我错过了什么?

我已经在 Tomcat 7 和 Tomcat 8 以及各种版本的 Spring 4 上尝试过它——目前是 4.3.14。

最佳答案

问题已解决。

我拥有的 SlashFriendlyUrlPathHelperUrlPathHelper 的扩展,导致出现问题,因为我的网络应用程序不是 Root 网络应用程序。删除它,但保留所有其他更改,它开始正常工作。

关于java - 以斜杠结尾的 Spring 4 路径参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49634115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com