Spring Boot 过滤器顺序:WebLogic 12c vs Tomcat 8

Posted

技术标签:

【中文标题】Spring Boot 过滤器顺序:WebLogic 12c vs Tomcat 8【英文标题】:Spring Boot filter order: WebLogic 12c vs Tomcat 8 【发布时间】:2016-11-04 20:52:09 【问题描述】:

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

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

以前有人遇到过这种特殊的怪癖吗?有没有办法让 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 中的一个错误 将 setOrder 值作为基于配置文件的参数传递以解决问题? profile-localhost' 是 tomcat verse profile-uat 是 weblogic。 嗨,布赖恩。我的团队早就离开了 WebLogic,但我们最终确定的修复与您的建议类似。我们只是定义了一个标志 application.fix-weblogic-filter-order=true,它在启动时反转了整个过滤器堆栈的顺序。感谢您的评论! 【参考方案1】:

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

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

【讨论】:

谢谢。 support.oracle.com/epmos/faces/DocContentDisplay?id=1996257.1,适用于任何拥有 Oracle 支持帐户的人。【参考方案2】:

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

【讨论】:

以上是关于Spring Boot 过滤器顺序:WebLogic 12c vs Tomcat 8的主要内容,如果未能解决你的问题,请参考以下文章

spring boot webfilter 顺序

Spring boot + mybatis + 多数据源入门搭建 + 跨域集成以及过滤器配置的方式和过滤器加载顺序控制

spring boot 自定义过滤器链

Zuul Proxy CORS 头包含多个值,头重复两次 - Java Spring Boot CORS 过滤器配置

Spring Boot 实现通用 Auth 认证的 4 种方式

4种Spring Boot 实现通用 Auth 认证方式