1、创建拦截器
实现 HandlerInterceptor 接口,实现接口中的方法。
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 创建拦截器
*/
public class InterceptorConfig implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("-------------preHandle-------------");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("-------------postHandle-------------");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("-------------afterCompletion-------------");
}
}
注意:
方法执行顺序:preHandle → Controller → postHandle → afterCompletion
只有 preHandle 方法返回 true 时,后面的方法才会执行。
2、配置拦截器
实现 WebMvcConfigurer 接口,实现 addInterceptors 方法。
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* 页面全局配置
*/
@Configuration
public class WebConfig implements WebMvcConfigurer {
/**
* 配置拦截器
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
/**
* addInterceptor:注册自定义的拦截器;
* addPathPatterns:需要拦截的路径;
* excludePathPatterns:排除拦截的路径
*/
registry.addInterceptor(new InterceptorConfig()).addPathPatterns("/**").excludePathPatterns("/test");
}
}
3、添加多个拦截器
需要添加多个拦截器时,只需要创建多个拦截器,配置中加入即可。
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 创建拦截器1111
*/
public class InterceptorConfig implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("-------------preHandle-1111------------");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("-------------postHandle-1111------------");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("-------------afterCompletion-1111------------");
}
}
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 创建拦截器2222
*/
public class InterceptorTwoConfig implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("-------------preHandle-2222------------");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("-------------postHandle-2222------------");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("-------------afterCompletion-2222------------");
}
}
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* 页面全局配置
*/
@Configuration
public class WebConfig implements WebMvcConfigurer {
/**
* 配置拦截器
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
/**
* addInterceptor:注册自定义的拦截器;
* addPathPatterns:需要拦截的路径;
* excludePathPatterns:排除拦截的路径;
* order:设置多个拦截器的执行顺序,数字越小越先执行
*/
registry.addInterceptor(new InterceptorConfig()).addPathPatterns("/**").excludePathPatterns("/test").order(2);
registry.addInterceptor(new InterceptorTwoConfig()).addPathPatterns("/**").excludePathPatterns("/test").order(1);
}
}