当前位置: 首页 > 面试题库 >

Filter order in spring-boot

萧伟兆
2023-03-14
问题内容

如何在spring-boot中指定过滤器的顺序?我需要在Spring Security过滤器之后插入MDC过滤器。我几乎尝试了所有方法,但过滤器始终是第一位的。这不起作用:

@Bean
@Order(Ordered.LOWEST_PRECEDENCE)
public UserInsertingMdcFilter userInsertingMdcFilter() {
    return new UserInsertingMdcFilter();
}

这也不起作用:

@Bean
public FilterRegistrationBean userInsertingMdcFilterRegistrationBean() {
    FilterRegistrationBean registrationBean = new FilterRegistrationBean();
    UserInsertingMdcFilter userFilter = new UserInsertingMdcFilter();
    registrationBean.setFilter(userFilter);
    registrationBean.setOrder(Integer.MAX_VALUE);
    return registrationBean;
}

问题答案:

Spring Security不会在它创建的Filter bean上设置订单。这意味着,当Boot为它创建FilterRegistrationBean时,它将获得默认顺序LOWEST_PRECEDENCE。

如果你想在Spring Security之后使用自己的过滤器,则可以为Spring Security的过滤器创建自己的注册并指定顺序。

所以我的问题的答案是:

@Bean
public FilterRegistrationBean securityFilterChain(@Qualifier(AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME) Filter securityFilter) {
    FilterRegistrationBean registration = new FilterRegistrationBean(securityFilter);
    registration.setOrder(Integer.MAX_VALUE - 1);
    registration.setName(AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME);
    return registration;
}

@Bean
public FilterRegistrationBean userInsertingMdcFilterRegistrationBean() {
    FilterRegistrationBean registrationBean = new FilterRegistrationBean();
    UserInsertingMdcFilter userFilter = new UserInsertingMdcFilter();
    registrationBean.setFilter(userFilter);
    registrationBean.setOrder(Integer.MAX_VALUE);
    return registrationBean;
}


 类似资料:
  • 问题内容: 我正在创建一些轻松的Web服务,并使用Spring-Boot创建嵌入式的tomcat容器。 要求之一就是要实现2路SSL。我一直在看HttpSecurity对象,可以使用以下方法使它仅通过SSL通道运行Web服务: 我似乎找不到一种使Web服务仅对提供有效客户端证书的应用程序可访问的方法。 我只有SSL的基本知识,因此即使是正确方向的通用指针也将不胜感激。 部署到该服务器上的服务器将具

  • 问题内容: Spring-boot利用了Spring配置文件(http://docs.spring.io/spring- boot/docs/current/reference/html/boot-features- profiles.html ),这些配置文件例如允许针对不同的环境进行单独的配置。我使用此功能的一种方法是配置要由集成测试使用的测试数据库。但是我想知道是否有必要创建自己的配置文件“

  • 问题内容: 我有一个Spring Boot REST应用程序,它依赖于Firebase中完成的身份验证。 在客户端,Firebase生成令牌,借此在Spring Boot中,我需要验证。 但是代码处于回调模式,因此如何实现该函数以使其能够完成任务? 之后如何返回?? 问题答案: 这是我自己尝试回答我自己的问题 您也可以尝试以下代码 获取更多详细信息URL https://firebase.goog

  • 问题内容: 我对spring / java相当陌生,并且一直在为我正在工作的项目检查spring- boot。我一直在遵循指南,最后有一个(半)运行中的Web应用程序MVC + JPA用于数据访问。当我通过Jar方法部署应用程序时,一切正常: 但是,我们的应用程序最终将部署到Tomcat(v7.0.40),因此我需要从项目中创建一个war文件。我已经在spring.io网站上遵循了将jars转换为

  • 问题内容: 我正在从事Spring Boot项目。我只有注释配置。我想包括推土机以将实体转换为DTO,并将DTO转换为实体。我在推土机网站上看到了,他们解释说我必须在spring xml配置文件中添加以下配置。由于我没有xml文件,而是注释配置Java类,因此我不知道如何将其转换为Java Configuration类。 如果有人可以给我一个例子,它将非常有用。谢谢 问题答案: 我认为这样的事情应

  • 问题内容: 我正在使用mapstruct映射我的实体和dto类…我在mapper类上存在循环问题… 我没有想法该怎么办…这是我的映射器课程 我的实体类… DTO与我的实体类具有相同的属性… 堆栈轨迹 有人可以帮助我确定为什么循环吗? 问题答案: 和之间存在循环依赖关系。您有3种可能性来解决周期: 一个映射器将始终忽略循环字段。我看到您在的清单中。您可以通过在映射器中忽略它们。 您将拥有显式映射,这

  • 问题内容: 在基于春季启动ws的应用程序中,我遵循合同优先方法创建了一个jax-ws Web服务。Web服务已启动,但是我无法自动将其他bean绑定到Webservice中。 我如何在春季将Web服务定义为bean? 以下是我的webservice impl类: MyServicePortType由Maven从wsdl文件生成 当我通过SoapUi调用此服务时,它会给出,因为MyBean对象未自动

  • 问题内容: 我有以下DTO: 是生成构造函数的Lombok批注。这意味着该类没有no-arg构造函数。 我使用了Spring Boot 1.4.3.RELEASE,bean能够从JSON反序列化此类对象。 升级到Spring Boot 2.0.0.M7之后,我收到以下异常: Spring Boot 1.4.3中使用的Jackson版本是,而Spring Boot 2.0.0.M7中使用的是Jack