简单使用
在springboot中使用 jar包加入web启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
实现HandlerInterceptor重写方法
@Slf4j
@Component
public class TokenHandler implements HandlerInterceptor {
@Value("false")
private String openWebMvcConfig;
/**
* 业务处理器请求之前执行
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (!Boolean.parseBoolean(openWebMvcConfig)){
log.info("关闭检查");
return true;
}
return HandlerInterceptor.super.preHandle(request, response, handler);
}
/**
* 业务处理器请求执行完成后,生成试图之前执行
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
/**
* 在DispatcherServlet完全处理完请求后被调用,可用于清理资源等。
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
这个时候我们只是实现了拦截应该调用方法的逻辑接口,我们还需要配置一些调用这个方法的配置,实现WebMvcConfigurer
@Component
public class WebMvcConfig implements WebMvcConfigurer {
private final TokenHandler tokenHandler;
public WebMvcConfig(TokenHandler tokenHandler){
this.tokenHandler = tokenHandler;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry
// 添加拦截器到容器
.addInterceptor(tokenHandler)
// 拦截地址
// ?匹配一个字符
// *匹配0个或多个字符
// **匹配0个或多个目录
.addPathPatterns("/moke/**")
// 排除掉不拦截的路径
.excludePathPatterns("/moke/post")
// 多拦截器执行顺序 数字越小执行越早
.order(0);
// 可以添加多个 如:registry.addInterceptor(testHandler).addPathPatterns("/moke/error");
}
}