5-8 SpringBoot拦截器的使用

Posted 孤注一掷 、

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5-8 SpringBoot拦截器的使用相关的知识,希望对你有一定的参考价值。

配置拦截器,打印接口耗时

新建:

@Component
 public class LogInterceptor implements HandlerInterceptor 

     private static final Logger LOG = LoggerFactory.getLogger(LogInterceptor.class);

     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception 
         // 打印请求信息
         LOG.info("------------- LogInterceptor 开始 -------------");
         LOG.info("请求地址:  ", request.getRequestURL().toString(), request.getMethod());
         LOG.info("远程地址: ", request.getRemoteAddr());

         long startTime = System.currentTimeMillis();
         request.setAttribute("requestStartTime", startTime);
         return true;
     

     @Override
     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception 
         long startTime = (Long) request.getAttribute("requestStartTime");
         LOG.info("------------- LogInterceptor 结束 耗时: ms -------------", System.currentTimeMillis() - startTime);
     
 

拦截器和过滤器有一点区别,它前后是分成两个方法的。

过滤器整个一起,中间用链去调用业务方法,而拦截器是前后分开。

注意:如果增加一个登录校验,当校验出未登录或者登录超时的时候,就return false,后面的业务逻辑就不会再执行了。

拦截器还需要加上一个全局配置:

@Configuration
public class SpringMvcConfig implements WebMvcConfigurer 

    @Resource
    LogInterceptor loginInterceptor;

    public void addInterceptors(InterceptorRegistry registry) 
        registry.addInterceptor(loginInterceptor)
                .addPathPatterns("/**").excludePathPatterns("/login");
    

/** 表示会相应所有的请求。

但是有一些拦截器,比如登录,并不是所有的接口都要做登录校验。

.excluPathPatterns   表示排除请求,不拦截。

测试结果:

 可知,过滤器的范围更大,因为它是在容器里面,先进入容器,再进入应用,再进入web应用,再进行业务逻辑。

最后拦截器先结束,过滤器再结束。

以上是关于5-8 SpringBoot拦截器的使用的主要内容,如果未能解决你的问题,请参考以下文章

拦截器在 Spring Boot 1.5.8 版本中无法接收请求

SpringBoot——SpringBoot中使用拦截器

基于Springboot搭建java项目(二十三)——SpringBoot使用过滤器拦截器和监听器

Springboot 中配置使用拦截器

在springboot中使用拦截器

SpringBoot慕课学习-SpringBoot开发常用技术整合-拦截器的使用