LoginSignup
jiK_o
@jiK_o

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

SpringBootを使ったWEBサービスで、GET/POST以外のメソッドを全体的に禁止したいです。

解決したいこと

SpringBoot、組込みTomcatを使ったWEBサービスで、GET/POST以外のメソッドを全体的に禁止したいです。
個々のコントローラの@RequestMappingでGETやPOSTのみを許容するように書いてはいるのですが、
それとは別に全体としてGET/POST以外はブロックする(固定のエラーコードを返す)という設定ができないでしょうか?

0

3Answer

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");
        }
    }
}

このフィルタはすべてのリクエストに対して一度だけ適用され、許可されたメソッド以外がリクエストされた場合にはエラーを返します。

2

やり方はいろいろありそうですが、フィルターを利用するのはどうでしょうか?

  1. OncePerRequestFilterなどを利用し、GETやPOST以外のリクエストがあった場合、特定のエラーコードを返すようなカスタムフィルターを作成する
  2. 1.で作成したカスタムフィルターを適用する
1

質問の仕方を間違ってる定番パターン。

「本当にやりたいこと」は何?
「本当にやりたいこと」が別にあるのに「GET/POST以外を禁止すればいいはず」という質問者が思いついた解決方法だけを質問している。
「本当にやりたいこと」を書けば「GET/POST以外を禁止」が間違った解決方法でもっといい方法があると分かる。

普通はPUTとかDELETEとか適切なメソッドも使うので「本当にやりたいこと」が分からなくても「GET/POST以外を禁止」が間違ってることだけは分かる。

0

Your answer might help someone💌