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 + mybatis + 多数据源入门搭建 + 跨域集成以及过滤器配置的方式和过滤器加载顺序控制
Zuul Proxy CORS 头包含多个值,头重复两次 - Java Spring Boot CORS 过滤器配置