一、首先写配置类
import com.tp.mybatisplusstudy.interceptor.TestInterceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /** * @ClassName: IntercepterConfig * @Author: tanp * @Description: 拦截器配置类 * @Date: 2020/5/12 16:38 */ @Configuration public class IntercepterConfig implements WebMvcConfigurer { @Autowired TestInterceptor interceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(interceptor).addPathPatterns("/user/**"); } }
二、拦截器实现类
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; /** * @ClassName: TestInterceptor * @Author: tanp * @Description: springboot项目添加拦截器测试类 * @Date: 2020/5/12 16:23 */ @Component public class TestInterceptor implements HandlerInterceptor { @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { System.out.println("执行到了afterCompletion方法"); } @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { System.out.println("执行到了postHandle方法"); } /* * 返回值:表示是否将当前的请求拦截下来 false:拦截请求,请求别终止。true:请求不被拦截,继续执行 * Object obj:表示被拦的请求的目标对象(controller中方法) */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception { System.out.println("执行到了preHandle方法"); System.out.println(obj); return true; } }
三、后台实现controller
@RestController @RequestMapping(value = "/user") public class UserController { @Autowired private UserMapper userMapper; @Autowired private IUserService iUserService; @RequestMapping(value = "/getUsers") public List<User> getUsers() { System.out.print("请求次数--"); List<User> users = userMapper.selectList(null); return users; } @RequestMapping(value = "/getUsers23") public List<User> getUsers2() { List<User> users = iUserService.list(); return users; }
}
四、注意点
在拦截器配置类中添加拦截器的路径时,也就是registry.addInterceptor(interceptor).addPathPatterns("/user/**");
给的路径中不应该包含项目名,直接就是controller映射出来的地址,也可直接是某个方法的地址,如
registry.addInterceptor(interceptor).addPathPatterns("/user/getUsers");
加了项目名无法实现拦截