SpringBootでのインターセプターの実装方法は何ですか?

Spring Bootでは、インターセプターを実装する方法は2つあります。

  1. HandlerInterceptorインターフェースを実装する:クラスを作成し、HandlerInterceptorインターフェースを実装し、そのpreHandle、postHandle、afterCompletionメソッドを実装します。これらはそれぞれ、リクエスト処理前、リクエスト処理後、リクエスト完了後に処理を行います。最後に、設定クラスでインターセプターを登録します。

以下はサンプルコードです。

@Component
public class MyInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 在请求处理前进行拦截处理
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        // 在请求处理后进行拦截处理
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // 在请求完成后进行拦截处理
    }
}

Interceptorを配置クラスに登録する:

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

    @Autowired
    private MyInterceptor myInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor).addPathPatterns("/**");
    }
}
  1. HandlerInterceptorAdapterクラスを継承する: HandlerInterceptorAdapterクラスを継承したクラスを作成し、そのpreHandle、postHandle、afterCompletionメソッドをオーバーライドし、設定クラスでインターセプタを登録する。

以下はサンプルコードです。

@Component
public class MyInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 在请求处理前进行拦截处理
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        // 在请求处理后进行拦截处理
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // 在请求完成后进行拦截处理
    }
}

配置クラスでインターセプターを登録する際にも、addInterceptorsメソッドを使用して登録する。

bannerAds