Reputation: 96
My filter as follows:
@Component
@Order(1)
public class MDCFilter implements Filter {
.....
and application.properties
security.filter-order=0
In above settings- my filter is coming first and then security filter. But i need mdcFilter after spring security filter.
Upvotes: 4
Views: 7736
Reputation: 1891
If you want your own Filter to go after Spring Security's you can create your own registration for Spring Security's filter and specify the order.
https://github.com/spring-projects/spring-boot/issues/1640
@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;
}
Upvotes: 2
Reputation: 1006
You can put your filter next to specific spring-security filter by defining you security config like that:
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private MDCFilter mdcFilter;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.addFilterBefore(mdcFilter, UsernamePasswordAuthenticationFilter.class);
}
}
In above example your filter will go just before UsernamePasswordAuthenticationFilter. You can also use HttpSecurity class methods addFilterAfter(Filter filter, Class<? extends Filter> afterFilter)
and addFilterAt(Filter filter, Class<? extends Filter> atFilter)
to specify your filter order.
Upvotes: 5