本文将介绍拦截器的作用和简单的使用方法,会已登录拦截的需求作为例子来解释。
拦截器的作用:主要是为了用来实现对request请求进行统一处理的操作,比如对请求的编码格式修改,进行业务上的请求拦截等等。
拦截器的实现:
- 先创建一个配置类,用来将拦截器注册到spring中。
1 import org.springframework.context.annotation.Configuration; 2 import org.springframework.web.servlet.config.annotation.InterceptorRegistration; 3 import org.springframework.web.servlet.config.annotation.InterceptorRegistry; 4 import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 5 6 /** 7 * @author: DengMin 8 * @create: 2019-12-06 10:22 9 **/ 10 11 @Configuration 12 public class TestConfig extends WebMvcConfigurerAdapter { 13 14 @Override 15 public void addInterceptors(InterceptorRegistry registry) { 16 //注册拦截器 17 InterceptorRegistration registration = registry.addInterceptor(new TestInterceptor()); 18 registration.addPathPatterns("/**"); 19 registration.excludePathPatterns("/base/nologin", 20 "/v2/api-docs", 21 "/webjars/bycdao-ui/**", 22 "/error"); 23 } 24 }
其中 addPathPatterns你需要拦截的地址,而excludePathPatterns就代表你不需要进行拦截的地址。
2.创建一个拦截器并实现HandlerInterceptor方法
1 import lombok.extern.slf4j.Slf4j; 2 import org.springframework.web.servlet.HandlerInterceptor; 3 import org.springframework.web.servlet.ModelAndView; 4 5 import javax.servlet.http.HttpServletRequest; 6 import javax.servlet.http.HttpServletResponse; 7 8 /** 9 * @author: DengMin 10 * @create: 2019-12-06 10:18 11 **/ 12 13 @Slf4j 14 public class TestInterceptor implements HandlerInterceptor { 15 /** 16 * 17 * Object o 18 * @param request 请求内容 19 * @param response 返回内容 20 * @param o 表示的是被拦截请求的目标对象 21 * @return 表示我们是否需要将当前的请求拦截下来 22 * 返回false 表示请求将会被终止 23 * 返回true 表示会继续被运行后面的方法 24 * @throws Exception 25 */ 26 27 @Override 28 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception { 29 30 31 //在请求被处理之前调用 32 String session = (String) request.getSession().getAttribute("user"); 33 if (session != null){ 34 return true; 35 } 36 response.sendRedirect(request.getContextPath()+"/base/nologin"); 37 return false; 38 } 39 40 /** 41 * 42 * @param httpServletRequest 43 * @param httpServletResponse 44 * @param o 45 * @param modelAndView 46 * @throws Exception 47 */ 48 @Override 49 public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { 50 System.out.println("在请求被处理之后被执行"); 51 } 52 53 @Override 54 public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { 55 System.out.println("在请求结束之后才进行调用"); 56 57 } 58 }
配置好之后,就可以通过访问链接进行测试了。