执行顺序
前置Filter---->前置Interceptor---->controller---->后置Interceptor---->后置Filter
实现步骤:
1、创建自己的拦截器类并实现 HandlerInterceptor 接口。
2、创建一个Java类继承WebMvcConfigurerAdapter,并重写 addInterceptors 方法。
3、实例化自定义的拦截器
4、将拦截器对像手动添加到拦截器链中(在addInterceptors方法中添加)
代码
自定义拦截器
实现 HandlerInterceptor 接口
preHandle() 方法:进入controller层之前拦截请求
postHandle() 方法:处理请求完成后视图渲染之前的处理操作 请求之后,控制器中抛出了异常的话就不会执行。
afterCompletion() 方法:视图渲染之后的操作,请求之后调用,不管抛不抛出异常都会被调用.参数中异常如果被异常处理器调用的话就不会传入到参数中。
package com.sid.util.interceptor;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @program: springboot
* @description: 自定义拦截器
* @author: Sid
* @date: 2018-11-20 14:32
* @since: 1.0
**/
@Component
//1、创建自己的拦截器类并实现 HandlerInterceptor 接口。
public class MyInterceptor implements HandlerInterceptor {
/**
* 进入controller层之前拦截请求
* */
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("MyInterceptor preHandle");
return true;
}
/**
* 处理请求完成后视图渲染之前的处理操作
*
* 请求之后,控制器中抛出了异常的话就不会执行
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("MyInterceptor postHandle");
}
/**
* 视图渲染之后的操作
*
* 请求之后调用,不管抛不抛出异常都会被调用.参数中异常如果被异常处理器调用的话就不会传入到参数中.
* */
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("MyInterceptor afterCompletion");
}
}
注册拦截器
spring boot 1.X是继承WebMvcConfigurerAdapter
重写addInterceptors方法,注册拦截器
package com.sid.util.interceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import javax.annotation.Resource;
/**
* @program: springboot
* @description:
* @author: Sid
* @date: 2018-11-20 14:36
* @since: 1.0
**/
@Configuration
//2、创建一个Java类继承WebMvcConfigurerAdapter,并重写 addInterceptors 方法。
public class MyInterceptorConfiguration extends WebMvcConfigurerAdapter {
//3、实例化自定义的拦截器
@Resource
private MyInterceptor myInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
//如果interceptor中不注入redis或其他项目可以直接new
//4、将拦截器对像手动添加到拦截器链中(在addInterceptors方法中添加)
registry.addInterceptor(myInterceptor).addPathPatterns("/**");
}
}
运行