Я пытаюсь использовать HiddenHttpMethodFilter
, чтобы мое приложение Spring MVC обрабатывало PUT
и DELETE
запросов. Вот часть моего web.xml
с фильтрами:HttpHiddenMethodFilter вызывает двойную проверку токена csrf
<filter>
<filter-name>httpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>httpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy
</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Но эта конфигурация вызывает запросы двойной проверки. Например. Я отправить PUT
запрос, то я вижу в отладчик, который HiddenHttpMethodFilter
был фактически выполнен, и способ управления успешно выполняет обновление и возвращает 200
, но где-то в DispatcherServlet или FrameworkServlet возвращает следующую ошибку:
HTTP Status 405 - Request method 'PUT' not supported
I can see that method was executed in debugger only; "Network" tab shows 405 only
Возможно, фильтры установлены неправильно? Как избежать двойной фильтрации?
Вероятно код метода контроллера будет уточнить: л
@RequestMapping(method = RequestMethod.PUT, value = "/update")
public ModelAndView update(@ModelAttribute("entity") @Valid Entity entity) {
ModelAndView model = new ModelAndView();
service.update(entity);
model.setViewName("/blog/success");
model.addObject("record", entity);
return model;
}
Это не имеет ничего общего с двойной фильтрацией. Вы должны перенаправить после PUT, когда ваш метод будет выполняться по умолчанию, он отправит его в JSP. JSP, как правило, работает только с GET и POST, и ничего больше. –
@ M.Deinum, извините, но я не уверен, что понял смысл. Я обновил вопрос, добавив метод контроллера в конце. Не могли бы вы предложить, что именно я должен изменить? –
Как указано, запрос передается вашему представлению в виде запроса PUT вместо запроса GET. Вы не можете сделать JSP с PUT. –