Spring 4路径参数以斜杠结尾

时间:2018-04-03 15:43:14

标签: java spring spring-mvc tomcat

我试图让我的Spring 4应用程序允许带有转义斜杠的结束的路径参数。

@RequestMapping得到的是:

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

我正在呼叫的网址是/dummy/ab%2F/events。所以" externalRequestId"是具有尾随编码斜杠的那个。

我已经到了正确调用处理程序的位置,以及路径段中间的转义斜线工作的地方 - 例如/dummy/ab%2Fcd/events,但不是最后。

到目前为止我做了什么:

  • 向Tomcat添加了系统属性:
    • -Dorg.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH =真
    • -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH =真
  • UrlPathHelper的自定义扩展程序将getServletPath替换为只返回request.getRequestURI()的{​​{1}}
  • 使用以下命令配置UrlPathHelper:
    • urlDecode = false
    • removeSemicolonContent = false
  • mvc:path-matching
  • 中使用mvc:annotation-driven中的此UrlPathHelper

我完全不知道接下来要去哪里。我甚至已经通过Spring和Tomcat进行调试来尝试解决它,我很难过。它看起来像,因为UrlPathHelper.getPathWithinServletMapping()正在调用request.getPathInfo(),而这正在返回剥离了%2F的路径。而这反过来是因为Tomcat中的其他地方 - 我现在已经丢失了窗口 - 它已将%2F解码为/,然后替换了" //"现在出现了" /"代替。

这感觉它应该相对简单,所以我错过了什么?

我已经在Tomcat 7和Tomcat 8以及不同版本的Spring 4上尝试过它 - 目前在4.3.14上。

1 个答案:

答案 0 :(得分:1)

问题解决了。

我所拥有的SlashFriendlyUrlPathHelperUrlPathHelper的扩展名导致问题,因为我的webapp Root webapp。删除它,但保持所有其他更改,并开始正常工作。