过滤器filter 是一个容器层的概念 是责任链模式的应用
创建一个类 实现servlet包的Filter接口 用@Component注解托管给springboot
可以配置多个filter 每个filter只能响应一次 响应顺序看这篇博客
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 打印请求信息
HttpServletRequest request = (HttpServletRequest) servletRequest;
LOG.info("------------- LogFilter 开始 -------------");
LOG.info("请求地址: {} {}", request.getRequestURL().toString(), request.getMethod());
LOG.info("远程地址: {}", request.getRemoteAddr());
long startTime = System.currentTimeMillis();
filterChain.doFilter(servletRequest, servletResponse);
LOG.info("------------- LogFilter 结束 耗时:{} ms -------------", System.currentTimeMillis() - startTime);
}
拦截器interceptor基于SpringMVC
需要在实现了WebMvcConfigurer的配置类中将其注入 并配置需要拦截的url
AOP 这个知乎问题
定义pointcut 在@before和@around做一些事情 避免不同对象重复做相同的事情 将相同的事情统一拦截到一处进行处理
带来的风险是切点的粒度带来的熟悉不同地方的逻辑的成本