Open5

(Spring)Filterとは?

ふじしろふじしろ

FIlterとは?

->インターセプターより手前(または後ろ)で行われる処理

Filterは、サーブレットの実行前または実行後に呼び出すことができます。
出典:What Is OncePerRequestFilter? | Baeldung

OncePerRequestFilterとは?

->リクエストの際に一度だけ行われるフィルター処理

Springは、指定されたリクエストに対してOncePerRequestFilterが 1 回だけ実行されることを保証します。
出典:What Is OncePerRequestFilter? | Baeldung

参考

ふじしろふじしろ

実装の流れ

  1. filter用のパッケージを作る
  2. OncePerRequestFilterクラスを継承した認証クラスを作る
  3. 上記で作成した認証クラスの中で認証処理を記述する。
  4. 完成した認証クラスをWebMvcConfigに登録する

->こちらのやり方だと全てのパスにフィルターがセットされてしまった。
->次の構成で実装することでフィルタリングを実行するパスを指定できた。

ふじしろふじしろ

実装の流れ(フィルタリング対象パスを指定する場合)

  1. 上記1~3までは同様
  2. 完成した認証クラスWebMvcConfigに登録する
  3. @Beanを付与して、FilterRegistrationBeanインスタンスを戻り値にもつメソッドを生成する
  4. その中でFilterRegistrationBeanインスタンスを生成し、引数に認証クラスのインスタンスを入れる
  5. FilterRegistrationBeanのメソッドであるaddUrlPatternsにより対象のパスを指定する。
  6. 戻り値としてインスタンスを返す。

実装イメージ

@Configuration
public class MyConfig implements WebMvcConfigurer {

    @Bean
    public FilterRegistrationBean filterRegister() {
        FilterRegistrationBean bean = new FilterRegistrationBean(new MyAuthenticationFilter());
        bean.addUrlPatterns("/api/*");
        return bean;
    }
}

認証クラスをMyAuthenticationFilterとして、
apiのURLにのみフィルターをかけているイメージ。

参考

ふじしろふじしろ

Filterの構造のイメージ

public class CommonsRequestLoggingFilter {

    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {

       // filterChain.dofilterより上の処理
       // ->コントローラより前に実行される

        filterChain.doFilter(request, response);

       // filterChain.dofilterより下の処理
       // ->コントローラより後に実行される

    }
}