1

我部署了我的Spring Boot Web application on WildFly 8.1,但现在我遇到了一些麻烦。

部署应用程序时,FilterRegistrationBeans注册 Servlet 过滤器。我知道FilterRegistrationBeans 是按顺序排列的AnnotationAwareOrderComparator,并且这些过滤器是按该顺序注册的。但是当我访问我的应用程序时,Undertow 按相反的顺序调用过滤器。

例如,如果 Spring Boot 注册过滤器是这样的:

  • 错误页面过滤器
  • metricFilter(来自 Spring Boot 执行器)
  • 字符编码过滤器
  • hiddenHttpMethodFilter
  • springSecurityFilterChain(来自 Spring Security)

Undertow 像这样调用这些过滤器:

  • springSecurityFilterChain
  • hiddenHttpMethodFilter
  • 字符编码过滤器
  • 公制过滤器
  • 错误页面过滤器

如何正确指定这些过滤器顺序?某些过滤器的顺序(如org.springframework.boot.context.web.ErrorPageFilter)在源代码中是硬编码的,我无法指定。

4

1 回答 1

1

这似乎是当 FilterRegistrationImpl#addMappingForUrlPatterns 中的 matchAfter 为 false 时发生的 Undertow 错误,而不是在所有声明的过滤器之前插入过滤器,而是在所有过滤器之前插入它。

于 2014-09-14T21:34:09.947 回答