0
HiddenHttpMethodFilter
を使用して、Spring MVCアプリケーションがPUT
およびDELETE
リクエストを処理できるようにしようとしています。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>
ただし、この設定ではリクエストが再確認されます。例えば。
HTTP Status 405 - Request method 'PUT' not supported
I can see that method was executed in debugger only; "Network" tab shows 405 only
:私はHiddenHttpMethodFilter
が実際に実行され、コントローラのメソッドが正常に更新を実行し、
200
を返し、その後のどこかのDispatcherServletまたはFrameworkServletそれは次のエラーを返した
PUT
要求、その後、私は、デバッガに表示を送信します
おそらく、私のフィルタは正しく設定されていませんか?どのようにダブルフィルタリングを避けることができますか?
おそらくコントローラメソッドのコードは、なめらかを明らかにする:
@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、申し訳ありませんが、私はその意味を理解しているかどうかはわかりません。最後にコントローラメソッドを追加して質問を更新しました。 正確に何を変更する必要があるかお教えください。 –
前述のように、リクエストはGETリクエストではなくPUTリクエストとしてビューに渡されます。 PUTを使ってJSPをレンダリングすることはできません。 –