spring-boot のフィルター順序 質問する

spring-boot のフィルター順序 質問する

spring-boot でフィルターの順序を指定するにはどうすればよいですか? Spring Security フィルターの後に MDC フィルターを挿入する必要があります。ほとんどすべてを試しましたが、フィルターが常に最初に表示されました。これは機能しませんでした:

@Bean
@Order(Ordered.LOWEST_PRECEDENCE)
public UserInsertingMdcFilter userInsertingMdcFilter() {
    return new UserInsertingMdcFilter();
}

これもうまくいきませんでした:

@Bean
public FilterRegistrationBean userInsertingMdcFilterRegistrationBean() {
    FilterRegistrationBean registrationBean = new FilterRegistrationBean();
    UserInsertingMdcFilter userFilter = new UserInsertingMdcFilter();
    registrationBean.setFilter(userFilter);
    registrationBean.setOrder(Integer.MAX_VALUE);
    return registrationBean;
}

ベストアンサー1

Spring の皆さんがまた助けてくれました。以下をご覧ください:

前者から:

Spring Securityは、作成する Beanに順序を設定しませんFilter。つまり、Boot が を作成するとFilterRegistrationBean、デフォルトの順序である が取得されますLOWEST_PRECEDENCE

独自の をFilterの後に表示したい場合はSpring Security、 のフィルターの独自の登録を作成しSpring Security、順序を指定できます。

私の質問に対する答えは次のとおりです。

@Bean
public FilterRegistrationBean securityFilterChain(@Qualifier(AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME) Filter securityFilter) {
    FilterRegistrationBean registration = new FilterRegistrationBean(securityFilter);
    registration.setOrder(Integer.MAX_VALUE - 1);
    registration.setName(AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME);
    return registration;
}

@Bean
public FilterRegistrationBean userInsertingMdcFilterRegistrationBean() {
    FilterRegistrationBean registrationBean = new FilterRegistrationBean();
    UserInsertingMdcFilter userFilter = new UserInsertingMdcFilter();
    registrationBean.setFilter(userFilter);
    registrationBean.setOrder(Integer.MAX_VALUE);
    return registrationBean;
}

おすすめ記事