当前位置: 首页 > 知识库问答 >
问题:

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

曹季同
2023-03-14

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

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

以前有没有人遇到过这种古怪的怪癖?有没有办法让WebLogic像雄猫一样行事?

我的代码:

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

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

我想在两个应用程序服务器上运行应用程序,这取决于上下文,所以我需要弄清楚如何使这一工作。

共有2个答案

江佐
2023-03-14

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

黄伟
2023-03-14

WebLogic中有一个bug:“20493506:WLS 12 . 1 . 2-Servlet 3 add filter以错误的顺序添加过滤器”。

Spring Boot团队在一年前就意识到了这一点。不幸的是,Spring Boot对此无能为力。希望15个多月的时间足以让Oracle发布一个可以应用于Weblogic安装的修补程序。

 类似资料:
  • 如何在Spring启动中指定过滤器的顺序?我需要在Spring Security过滤器之后插入我的MDC过滤器。我几乎尝试了一切,但我的过滤器总是第一位的。这不起作用: 这也不管用:

  • 我已将过滤器配置如下,但在Spring Security Filter链之前不会调用它。我已将顺序设置为零 我使用的是Spring Boot 1.3,它支持在过滤器上设置顺序

  • 不论是客户端,还是服务器,都可以添加多个过滤器。假设我们按照添加的顺序把它们叫做 filter1, filter2, … filterN。那幺它们的执行顺序是这样的。 在客户端的执行顺序 +------------------- OutputFilter -------------------+ | +-------+ +-------+ +-------

  • 我正在我的web应用程序中使用spring cloud sleuth。不幸的是,我接到呼叫的第三方正在X-B3-TraceId标头中发送UUID。但是,spring中的TraceFilter在从字符串转换为十六进制时可能会检测出错误,因为UUID中有“-”字符。因此,我决定编写自己的过滤器,它将在TraceFilter之前拦截请求,并从标头中删除跟踪id。这是我的配置: 这是spring clou

  • 我希望Hibernate创建一个基于实体类的模式,然后Flyway填充表。现在Flyway在创建表之前启动v1__init.sql并抛出异常。我该如何改变这个顺序或者我能做什么解决方案? pom.xml:

  • 我在我的网络应用程序中偶然发现了一个错误,在我发现发生了什么之前,这个错误让我抓耳挠腮(最终扯了扯头发)。 基本上,我在我的网站上定义了两个过滤器。xml和两个类似的映射: 它们都是Spring MVC过滤器。我的问题是,我得到的表单数据没有被解释为UTF-8,尽管事实上编码过滤器应该在其他任何东西有机会从中读取之前将请求编码设置为UTF-8。 我最后注意到,表单方法过滤器在编码过滤器之前执行,尽