Spring 引导过滤器顺序:WebLogic 12c 与 Tomcat 8

Spring Boot filter order: WebLogic 12c vs Tomcat 8

我正在 Spring Boot 中编写一个 Web 应用程序,它有一个必须在 spring 的安全过滤器之后执行的过滤器。

我已经通过 java 配置配置了我的过滤器链,并将我的自定义过滤器的顺序设置为高于 spring 安全顺序的值。当 运行 在 Tomcat 上运行应用程序时,这会按预期工作;但是,这在 WebLogic 12c 中不起作用。 WebLogic 以与 Tomcat 执行它的方式相反的方式执行过滤器链(and/or 反之亦然)。

有没有人遇到过这种怪癖?有没有办法让 WebLogic 的行为像 Tomcat 那样?

我的代码:

final FilterRegistrationBean registration = new FilterRegistrationBean(new MyFilter());
registration.setOrder(-99); // spring security's is -100

在 Tomcat,此 MyFilter 在安全过滤器之后触发。在 WebLogic 中,MyFilter 在安全过滤器之前触发。例如,如果我将 setOrder 的值更改为 -101,那么它将适用于 WebLogic 但不适用于 Tomcat.

我想 运行 两个应用程序服务器上的应用程序,具体取决于上下文,所以我需要弄清楚如何让它工作。

WebLogic 中存在错误:“20493506:WLS 12.1.2 - Servlet 3 addFilter 添加过滤器的顺序错误”。

Spring 引导团队 made aware of this 一年多以前。不幸的是,Spring Boot 对此无能为力。希望 15 个月以上的时间足以让 Oracle 发布一个可以应用到 Weblogic 安装的修复程序。

不确定补丁是否可用或我们的运营团队尚未应用它,但它对我们来说仍然无法使用。 This 是我想出的解决方案。