Знаки процента (%) не должны вызывать проблем, если вы правильно их кодируете по URL (%25
). Однако косая черта и обратная косая черта не будут работать с Tomcat, даже если вы закодируете их (%2F
и %5C
).
Вы можете установить следующие свойства при запуске приложения:
-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
-Dorg.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH=true
Однако это не решит проблему, потому что в этом случае эти закодированные косые черты будут распознаваться как реальные. Итак, допустим, у вас есть следующий контроллер:
@ResponseBody
@RequestMapping("/api/{foo}")
public String getFoo(@PathVariable String foo) {
return foo;
}
Хорошо, тогда, если вы позвоните /api/test%5Ctest
, он не сможет найти правильный путь. Решение этой проблемы состоит в том, чтобы использовать сопоставления с подстановочными знаками и анализировать сам URL-адрес из входящего HttpServletRequest
:
@RequestMapping("/api/**")
public String getFoo(HttpServletRequest request) {
// ...
}
Другое решение - использовать совершенно другой веб-контейнер. Например, при использовании Jetty это совсем не проблема, и косые черты и обратные косые черты в кодировке URL будут работать.