【问题标题】:Spring boot filter is ignoredSpring Boot 过滤器被忽略
【发布时间】:2021-11-04 16:57:22
【问题描述】:

我正在尝试创建一个过滤器,但它被忽略了

@Component
@Order(1)
public class CarsFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest httpServletRequest,
                                    HttpServletResponse httpServletResponse,
                                    FilterChain filterChain) throws ServletException, IOException {

        httpServletResponse.addHeader("X", "XX");
        filterChain.doFilter(httpServletRequest, httpServletResponse);
    }
}

我是不是忘了做某事?

【问题讨论】:

  • 愚蠢的问题:您如何检查过滤器是否被忽略?还有一种方法httpServletResponse.setHeader("X", "XX");也可以试试。
  • 组件扫描是否拾取到组件?
  • @Snigdhajyoti 我正在用测试检查它,我试图在过滤器中做一些 System.out.println() - 两者都没有显示。 setHeader 没有帮助:(
  • 这就是你的答案——组件永远不会被创建。因此过滤器不会被注册和应用。您需要检查您的组件扫描。您的代码中是否有 @ComponentScan 注释?它是否明确定义了任何包?
  • 提醒一下,这是在集成测试中设置测试上下文时的方式。 \@Autowired 私有 WebApplicationContext webApplicationContext;私有 MockMvc mockMvc; \@Before public void setUp() throws Exception { mockMvc = webAppContextSetup(webApplicationContext).addFilter(...).build(); }

标签: java spring spring-boot rest filter


【解决方案1】:

问题在于没有pom依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

过滤器是从一些java库加载的,因此编译成功(可以在模块设置中删除)

【讨论】:

    猜你喜欢
    • 2018-07-12
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 2018-02-25
    • 1970-01-01
    • 2020-08-30
    相关资源
    最近更新 更多