我试图插入(在第一个位置)一个简单的自定义科尔过滤器内的Spring过滤器链。
如果我这样做
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CorsFilter implements Filter {
我可以通过在Spring的www.example中放置断点来验证它 www.example.com 哪里有线
chain=getFilterChain(baseRequest, target, servlet_holder);
我只是想知道我是否希望不使用@Componenent and @Order
,而是在Application上下文中定义Filter bean。如何设置过滤器的顺序?
3条答案
按热度按时间i86rm4rw1#
参见示例:在ServletInitializer类中:
我的过滤器的名称是“requestLogFilter”
警告:不要在Filter类中使用@Component注解。
ycggw6v22#
在corsFilter的情况下,通常需要设置此过滤器的顺序,以在springSecurityFilterChain之前加载,并将其他过滤器(如 Boot 中的errorPageFilter)加载在链的最开始处。否则CORS支持将被破坏,并且所需的头将不会被引入。这可以通过以下方式实现:
setOrder(Integer.MIN_VALUE)将确保它是加载的第一个过滤器。即使有其他过滤器,如errorPage过滤器,其顺序设置为Integer。MIN_VALUE(-2147483648)。
bvuwiixz3#
另一种选择是让你的过滤器实现
org.springframework.core.Ordered
,如果你使用的是spring webflux(它没有FilterRegistrationBean
),这是唯一的选择:或者你甚至可以把它作为过滤器中的变量。