拦截器相似于过滤器,可是拦截器提供更精细的的控制能力,它能够在一个请求过程当中的两个节点进行拦截:java
例如,你能够使用拦截器在将请求发送到控制器以前添加请求头,并在将响应发送到客户端以前添加响应标头。ide
建立一个拦截器,须要实现HandlerInterceptor接口,他有三个方法来完成拦截post
preHandle(): 用于在将请求发送到控制器以前执行操做。此方法应返回true以将响应返回给客户端。学习
postHandle() :用于在将响应结果发送到客户端以前执行操做。spa
afterCompletion() :用于在请求响应所有结束后执行以后的操做。blog
一个自定义的拦截器代码以下:接口
@Component
public class ProductServiceInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(
HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return true;
}
@Override
public void postHandle(
HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception exception) throws Exception {}
}
拦截器完成后,必须使用WebMvcConfigurerAdapter向InterceptorRegistry注册此Interceptor,以下所示io
@Component
public class ProductServiceInterceptorAppConfig extends WebMvcConfigurerAdapter {
@Autowired
ProductServiceInterceptor productServiceInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(productServiceInterceptor);
}
}