springboot项目使用拦截器实现Filter解接口,在类上同时使用@WebFilter@Component注解,导致urlPatterns指定的拦截路径无法生效,出现拦截所有接口情况。

解决方案:
在类上去掉@Component注解,在启动类添加@ServletComponentScan注解。

//@Component 加上这个会导致下面urlPatterns失效 改为启动类添加@ServletComponentScan注解
@WebFilter(filterName = "dataFilter", urlPatterns = "/api/*")
@Order(Integer.MAX_VALUE)
@Slf4j
public class DataFilter implements Filter {

 
    @Override
    public void init(FilterConfig filterConfig) {
        log.info("------------------Initializing dataFilter");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
     	chain.doFilter(request, response);
    }


    @Override
    public void destroy() {
        log.info("------------------Destroy dataFilter");
    }

}

启动类

@ServletComponentScan
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(VideoScreenApplication.class, args);
    }

}

@ServletComponentScan作用

SpringBootApplication 上使用@ServletComponentScan 注解后
Servlet可以直接通过@WebServlet注解自动注册
Filter可以直接通过@WebFilter注解自动注册
Listener可以直接通过@WebListener 注解自动注册

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐