SpringBootを使ったWEBサービスで、GET/POST以外のメソッドを全体的に禁止したいです。
解決したいこと
SpringBoot、組込みTomcatを使ったWEBサービスで、GET/POST以外のメソッドを全体的に禁止したいです。
個々のコントローラの@RequestMappingでGETやPOSTのみを許容するように書いてはいるのですが、
それとは別に全体としてGET/POST以外はブロックする(固定のエラーコードを返す)という設定ができないでしょうか?
0
SpringBoot、組込みTomcatを使ったWEBサービスで、GET/POST以外のメソッドを全体的に禁止したいです。
個々のコントローラの@RequestMappingでGETやPOSTのみを許容するように書いてはいるのですが、
それとは別に全体としてGET/POST以外はブロックする(固定のエラーコードを返す)という設定ができないでしょうか?
SpringBootを使ったWebアプリケーションで、GETおよびPOSTメソッド以外を全体的に禁止する設定は、フィルタを使用して行うことができます
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Component
public class HttpMethodFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
String method = request.getMethod();
// GETとPOSTのみ許可
if ("GET".equals(method) || "POST".equals(method)) {
filterChain.doFilter(request, response);
} else {
// 他のメソッドは403エラーを返す
response.sendError(HttpServletResponse.SC_FORBIDDEN, "This method is not allowed");
}
}
}
このフィルタはすべてのリクエストに対して一度だけ適用され、許可されたメソッド以外がリクエストされた場合にはエラーを返します。
やり方はいろいろありそうですが、フィルターを利用するのはどうでしょうか?