【发布时间】: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