1.根传统的spring项目一样 我们需要定义自己的拦截器的话。要实现 HandlerInterceptor
接口或者继承对应的类也可以。重写父类的方法
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
此方法在拦截action之前掉用 如果返回true 则允许通过 返回false则不执行action方法
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
此方法在请求之后,渲染视图之前调用
根据你的业务需求来重写不同的方法
2.定义自己的拦截器
import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyInterceptor implements HandlerInterceptor{ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //拦截请求action方法之前调用 true可以继续执行。false不能继续执行 System.out.print("=========preHandle"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { //请求之后调用 但是在视图渲染之前调用 System.out.print("=========postHandle"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { //整个请求结束之后被调用 System.out.print("=========afterCompletion"); } }
这个是我的代码逻辑
3.定义Config 来注册对应的拦截器。相当于在springMVC中用xml标签引入拦截器
由于我的版本过高 对于WebMvcConfigurerAdapter 已经过期所以继承
WebMvcConfigurationSupport
/** * WebMvcConfigurerAdapter 已经过期 此处继承WebMvcConfigurationSupport * @Configuration 注解相当于定义了一个xml 文件 一般里面的方法 用@Bean 表示一个xml * 中的bean 也就是spring的IOC 容器的意思,这样就好理解 */ @Configuration public class WebConfig extends WebMvcConfigurationSupport{ @Override protected void addInterceptors(InterceptorRegistry registry) { /** 任何请求都会拦截 但是会排出掉 login 的请求 **/ registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatterns("/login"); super.addInterceptors(registry); } }
注解@Configuration 相当于是一个xml文件 继承 WebMvcConfigurationSupport 重写addInterceptors
加入自己的拦截器逻辑即可!
SpringBoot在启动的时候会扫描到该注解并且初始化到IOC容器中!
测试访问会调用拦截器中的逻辑!