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 版本中无法接收请求