Ответ 1
Ребята из Spring снова помогли. См. https://github.com/spring-projects/spring-boot/issues/1640 и https://jira.spring.io/browse/SEC-2730
Spring Безопасность не устанавливает порядок в фильтре bean, чтобы он создает. Это означает, что, когда Boot создает FilterRegistrationBean для него, он получает порядок по умолчанию, который LOWEST_PRECEDENCE.
Если вы хотите, чтобы ваш собственный фильтр прошел после Spring Security, вы можете создайте свою собственную учетную запись для Spring фильтра безопасности и укажите порядок.
Итак, ответ на мой вопрос:
@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;
}