tutorial starter mvc espaƱol desde data cero and java spring spring-mvc spring-boot

java - starter - Orden de filtro en resorte de arranque



spring mvc and spring boot (2)

Chicos de Spring ayudaron de nuevo. Ver https://github.com/spring-projects/spring-boot/issues/1640 y https://jira.spring.io/browse/SEC-2730

Spring Security no establece un orden en el filtro Bean que crea. Esto significa que, cuando Boot está creando un FilterRegistrationBean para él, obtiene el orden predeterminado que es LOWEST_PRECEDENCE.

Si desea que su propio filtro vaya después de Spring Security, puede crear su propio registro para el filtro de Spring Security y especificar el pedido.

Entonces la respuesta a mi pregunta es:

@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; }

¿Cómo puedo especificar el orden de mi filtro en Spring-boot? Necesito insertar mi filtro MDC después del filtro Spring Security. Intenté casi todo, pero mi filtro siempre fue primero. Esto no funcionó:

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

Esto tampoco funcionó:

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