首先注册我们要有完整的一个可以开始的开发环境
先自己创建一个配置类 InterceptorConfig, 实现springboot自带的拦截器接口 WebMvcConfigurer.
1 package com.example.demo.TestInterceptor; 2 3 import org.springframework.context.annotation.Configuration; 4 import org.springframework.web.servlet.config.annotation.InterceptorRegistry; 5 import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; 6 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 7 8 9 @Configuration 10 public class InterceptorConfig implements WebMvcConfigurer { 11 12 13 @Override //用来注册拦截器,我们自己写好的拦截器需要在这里注册才能生效 14 public void addInterceptors(InterceptorRegistry registry) { 15 16 // addPathPatterns("/**") 表示拦截所有的请求, 17 // excludePathPatterns("/user", "/register") 表示除了登陆与注册之外,因为登陆注册不需要登陆也可以访问 18 registry.addInterceptor(new LogCostInterceptor()).addPathPatterns("/**").excludePathPatterns("/login", "/user"); 19 } 20 21 @Override //用来配置静态资源,如html,js等前端页面资源 22 public void addResourceHandlers(ResourceHandlerRegistry registry) { 23 24 } 25 }
自己写及配置自己的业务需求层面
1 package com.example.demo.TestInterceptor; 2 3 import org.springframework.web.servlet.HandlerInterceptor; 4 import org.springframework.web.servlet.ModelAndView; 5 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8 9 10 public class LogCostInterceptor implements HandlerInterceptor { 11 @Override 12 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 13 System.err.println("preHandle是请求执行(bool)"); //preHandle是请求执行前执行的 14 return true;//如果这里是fale就是不会去执行下面的方法 15 // 在这里可以完全的执行和实现相应的业务 流程,如登入模块等 17 } 18 19 @Override 20 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { 21 System.err.println("postHandle是请求执行(void)"); //postHandler是请求结束执行的,但只有preHandle方法返回true的时候才会执行 22 } 23 24 @Override 25 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { 26 System.err.println("afterCompletion是请求执行(afterCompletion)");//afterCompletion是视图渲染完成后才执行,同样需要preHandle返回true,该方法通常用于清理资源等工作 27 } 28 }