2014-09-12 70 views
1

我部署了我的Spring Boot Web application on WildFly 8.1,但现在我遇到了一些麻烦。WildFly(或Undertow)上的Spring Boot:Servlet Filter的命令被反转

当应用程序被部署时,FilterRegistrationBeans注册了Servlet过滤器。我知道FilterRegistrationBean是由AnnotationAwareOrderComparator排序的,而那些过滤器是按该顺序注册的。但是当我访问我的应用程序时,Undertow按相反顺序调用过滤器。

例如,如果弹簧引导注册过滤器这样的:

  • errorPageFilter
  • metricFilter(从弹簧引导促动器)
  • characterEncodingFilter
  • hiddenHttpMethodFilter
  • springSecurityFilterChain(从春季安全)

暗潮调用这些过滤器这样的:

  • springSecurityFilterChain
  • hiddenHttpMethodFilter
  • characterEncodingFilter
  • metricFilter
  • errorPageFilter

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

+0

您是否在Tomcat或任何其他Java EE应用程序服务器上尝试了此操作?想知道这是一个引导问题还是WildFly? – 2014-09-12 15:36:32

+0

我正在尝试WildFly和嵌入式Tomcat。在Tomcat上,过滤器顺序是收集的(这是我的预期),但在WildFly上,顺序如上所述。 – riue 2014-09-12 16:09:14

+0

在团队内部进行检查并会尽快回复您。 – 2014-09-13 20:17:07

回答

0

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

+0

我已经修复了这个上游https://issues.jboss.org/browse/UNDERTOW-309 – 2014-09-14 21:46:34

+0

谢谢你的修复! – riue 2014-09-15 02:33:51