Кодированная косая черта (% 2F) с параметром пути Spring RequestMapping дает HTTP 400

Это не дубликатупомянутый вопроспотому что это зависит от весны. Кто бы что ни добавил (через 3 года после факта!)Потрудитесь прочитать вопрос или ветку комментариев, чтобы увидеть, каков был настоящий ответ. Принятый ответ неОтвет не вполне, но автор ответа так и не вернулся и отредактировал его, как я и просил.

Учитывая метод restful ниже, Spring 3.1 выдает ошибку 400 с "Запрос, отправленный клиентом, был синтаксически неверным (). " когдаtoken параметр содержит косую черту в кодировке URL (% 2F), например "https://somewhere.com/ws/stuff/lookup/resourceId/287559/token/R4o6lI%2FbBx43/userName/jim» Без% 2F все работает нормально. Третья сторона уже вызывает эту услугу (конечно!), Поэтому я могуизменить то, что они посылают, по крайней мере, в краткосрочной перспективе. Любые идеи о том, как обойти это на стороне сервера?

Эта проблема очень хорошо описана здесьhttps://jira.springsource.org/browse/SPR-8662 хотя эта проблема связана с UriTemplate, который я не использую, что я могу сказать.

@RequestMapping("/ws/stuff/**")
@Controller
public class StuffController {
  @RequestMapping(value = "/ws/stuff/lookup/resourceId/{resourceId}/token/{token}/userName/{userName}", method = RequestMethod.GET)
   public @ResponseBody
   String provisionResource(@PathVariable("resourceId") String resourceId, @PathVariable("token") String token, @PathVariable("userName") String userName, ModelMap modelMap,
         HttpServletRequest request, HttpServletResponse response) {
      return handle(resourceId, userName, request, token, modelMap);
   }
}

Примечание: это на Glassfish 3.1.2, и сначала это был Grizzly / Glassfish, не принимающий косую черту, но

-Dcom.sun.grizzly.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

исправил это.

asadmin set configs.config.server-config.network-config.protocols.protocol.http-listener-2.http.encoded-slash-enabled=true

А не было»кажется, чтобы помочь.

Ответы на вопрос(6)

Ваш ответ на вопрос