本文将介绍拦截器的作用和简单的使用方法,会已登录拦截的需求作为例子来解释。
拦截器的作用:主要是为了用来实现对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 }
配置好之后,就可以通过访问链接进行测试了。