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

更改Spring启动中过滤器的顺序

咸承教
2023-03-14

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

    @Bean
    public FilterRegistrationBean getZipkinFilterRegistrationBean() {

        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new ZipkinHeaderReplaceFilter());
        bean.setOrder(1);
        bean.addUrlPatterns("/");
        return bean;
    }

这是spring cloud sleuth的TraceFilter:

@Order(TraceFilter.ORDER)
public class TraceFilter extends GenericFilterBean {

    protected static final int ORDER = Ordered.HIGHEST_PRECEDENCE + 5;
    .........
}

所以跟踪过滤器的顺序正好是-2147483643,我认为这使得它出现在我的过滤器之前。我不想更改过滤器的顺序。由于跟踪滤波器由spring boot auto configuration自动注册,如何将跟踪滤波器的顺序更改为2?

共有1个答案

裴理
2023-03-14

下面是Spring Boot过滤器的详细信息,它说:

如果基于约定的映射不够灵活,您可以使用ServletRegstrationBeanFilterRegstrationBeanServletListenerRegstrationBean类进行完全控制。

我相信你可以改变这些课程的顺序。过滤器的顺序与在配置类中添加(过滤器到配置类)顺序相同。

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

  • 问题内容: 我想要的是类似于文档中的此示例的示例,但是具有唯一的输入,可以通过“ any”,“ name”或“ phone”属性来扮演过滤的三个角色,角色的更改是通过单击锚点完成的。这是准备好的代码http://jsfiddle.net/ubugnu/QuyCU/如何动态更新ng- model属性? 的HTML JS 问题答案: 您可以定义如下:动态更改应绑定到哪个变量(另一个变量在哪里)。 参见

  • 我有下面的servlet过滤器。

  • 问题内容: 我正在使用Spring Security来保护对网站的HTTP请求。主要用途是保护页面安全,以便在尝试访问这些页面时将用户重定向到登录页面。 但是,我还有一个要求。在我的模型中,我可以将用户密码标记为临时密码,这样,当用户成功登录时,应自动强制他们更改密码。更改密码后,应将其转发到最初尝试访问的页面。 有人为此目的使用过Spring Security吗?我需要创建自己的自定义过滤器吗?

  • 我正在用Spring集成编写一个过滤器。 在这个过滤器中,我检查了一组先决条件。如果不满足任何先决条件,我将需要更改消息有效载荷(甚至头),以添加用户要完成的操作集,以满足它,并通过discar通道将其返回给用户。 我可以使用服务激活器,但我认为过滤器在这种情况下更具描述性。 最干净的方法是什么? 这是一种伪代码: 谢谢

  • 我试图用两个不同的过滤器来配置spring security。我想要的是有一些将由一个过滤器处理的网址,和一些将由其他过滤器处理的网址。这是我想到的设置: 过滤器看起来像这样: 过滤器1 : 过滤器2 : 问题是这两个过滤器都是在一个链中为每个请求调用的。我提出的任何请求,它首先通过一个过滤器,然后通过另一个,而不是仅仅通过一个。 我该怎么解决这个问题? 提前感谢。