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
注解自动注册