【问题标题】:Spring 4 Path Parameter ending in a slashSpring 4路径参数以斜杠结尾
【发布时间】:2023-03-10 23:21:01
【问题描述】:

我正在尝试让我的 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 = 假
    • removeSemicolonContent = false
  • 使用来自mvc:path-matching 的UrlPathHelper,在mvc:annotation-driven

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

这感觉应该是比较简单的,那我错过了什么?

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

【问题讨论】:

    标签: java spring spring-mvc tomcat


    【解决方案1】:

    问题解决了。

    我拥有的 SlashFriendlyUrlPathHelperUrlPathHelper 的扩展名,这引起了问题,因为我的 webapp 不是 Root webapp。删除它,但保留所有其他更改,它开始正常工作。

    【讨论】:

    • 很高兴听到您找到了解决方案
    猜你喜欢
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多