主要分为两个步骤,首先通过实现HandlerInterceptor接口实现拦截器;然后通过实现WebMvcConfigurer接口实现一个配置类,在配置类中注入拦截器。最后再通过@Configuration注解注入配置。上代码:
实现HandlerInterceptor接口
实现HandlerInterceptor接口需要实现3个方法:preHandle、postHandle、afterCompletion。Java8之后不再强制生成。
public class BaseInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//如果设置为false时,被请求时,拦截器执行到此处将不会继续操作
//如果设置为true时,请求将会继续执行后面的操作
System.out.println("preHandle...");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle...");
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion...");
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
实现WebMvcConfigurer接口,注册拦截器
实现WebMvcConfigurer接口来实现一个配置类,将上面实现的拦截器的一个对象注册到这个配置类中。
@Configuration
public class BaseConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//注册TestInterceptor拦截器
InterceptorRegistration registration = registry.addInterceptor(new BaseInterceptor());
//所有路径都被拦截
registration.addPathPatterns("/app-version/v1/page/history");
//添加不拦截路径
registration.excludePathPatterns(
"/login", //登录路径
"/**/*.html", //html静态资源
"/**/*.js", //js静态资源
"/**/*.css" //css静态资源
);
}
}
将拦截器注册到了拦截器列表中,并且指明了拦截哪些访问路径,不拦截哪些访问路径,不拦截哪些资源文件,最后再以@Configuration注解将配置注入。