1. 概要

このクイック記事では、Springセキュリティフィルターチェーン用のカスタムフィルターの作成に焦点を当てます。

2. フィルタの作成

Spring Securityはデフォルトでいくつかのフィルターを提供しており、ほとんどの場合、これらで十分です。

ただし、もちろん、チェーンで使用する新しいフィルターを作成して、新しい機能を実装する必要がある場合もあります。

org.springframework.web.filter.GenericFilterBeanを実装することから始めます。

GenericFilterBean は、Springに対応した単純なjavax.servlet.Filter実装実装です。

実装について–単一のメソッドを実装するだけで済みます。

public class CustomFilter extends GenericFilterBean {

    @Override
    public void doFilter(
      ServletRequest request, 
      ServletResponse response,
      FilterChain chain) throws IOException, ServletException {
        chain.doFilter(request, response);
    }
}

3. セキュリティ構成でのフィルターの使用

フィルタをSpringセキュリティ構成に接続するには、XML構成またはJava構成のいずれかを自由に選択できます。

3.1. Java構成

WebSecurityConfigurerAdapterからconfigureメソッドをプログラムでオーバーライドするフィルターを登録できます。 たとえば、HttpSecurityインスタンスのaddFilterAfterメソッドで機能します。

@Configuration
public class CustomWebSecurityConfigurerAdapter
  extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.addFilterAfter(
          new CustomFilter(), BasicAuthenticationFilter.class);
    }
}

考えられる方法はいくつかあります。

  • addFilterBefore(filter、class)– は、指定されたフィルター class の位置の前に、フィルターを追加します。
  • addFilterAfter(filter、class) –指定されたフィルタークラスの位置の後にフィルターを追加します
  • addFilterAt(filter、class) –指定されたフィルター classの場所にfilterを追加します
  • addFilter(filter) –SpringSecurityが提供するフィルターのインスタンスまたは拡張である必要があるfilterを追加します

3.2. XML構成

custom-filter タグとこれらの名前のいずれかを使用してフィルターをチェーンに追加し、フィルターの位置を指定できます。 たとえば、after属性で指摘できます。

<http>
    <custom-filter after="BASIC_AUTH_FILTER" ref="myFilter" />
</http>

<beans:bean id="myFilter" class="com.baeldung.security.filter.CustomFilter"/>

フィルタをスタック内に正確に配置するためのすべての属性は次のとおりです。

  • after –カスタムフィルターがチェーンに配置される直後のフィルターについて説明します
  • before –フィルターをチェーンに配置する前のフィルターを定義します
  • position –明示的な位置にある標準フィルターをカスタムフィルターに置き換えることができます

4. 結論

このクイック記事では、カスタムフィルターを作成し、それをSpringSecurityフィルターチェーンに配線しました。

いつものように、すべてのコード例はサンプルGithubプロジェクトで利用できます。