SpringBoot的拦截器
拦截器特性
1).拦截器只能拦截controller相关请求
2).拦截器可以中断请求轨迹
3).请求之前如果该请求配置了拦截器,请求会先经过拦截器,拦截器放心之后执行请求的controller,controller执行完成之后会回到拦截器继续执行拦截器中的代码
拦截器执行顺序
preHandler 预先处理方法: 最先执行方法 返回值布尔类型 true 放行请求,false中断,放行后执行controller内容
postHandler 过程中处理: controller返回之后回到postHandler这个方法执行,执行完成这个方法开始响应浏览器
afterCompletion 最后完成: 当响应结束之后会执行拦截器中这个方法内容
**自定义拦截器 implements HandlerInterceptor **
package com.codegzy.interceptors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//自定义拦截器
public class Myinterceptor implements HandlerInterceptor {
private static final Logger log = LoggerFactory.getLogger(Myinterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.debug("=============1============");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
log.debug("==============3=============");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
log.debug("===================4================");
}
}
配置拦截器
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor("拦截器")
.addPathPatterns("拦截路径")
.excludePathPatterns("排除路径")
.order("指定执行顺序") //order用来执行多个拦截器的执行顺序,order书写是自然数,按照自然数顺序执行
}
}