Loading

Spring Boot 拦截器

本文将介绍拦截器的作用和简单的使用方法,会已登录拦截的需求作为例子来解释。

拦截器的作用:主要是为了用来实现对request请求进行统一处理的操作,比如对请求的编码格式修改,进行业务上的请求拦截等等。

拦截器的实现:

  1. 先创建一个配置类,用来将拦截器注册到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 }

 


 

配置好之后,就可以通过访问链接进行测试了。 

 

 

 

 

 

 

 

posted @ 2019-12-06 11:41  邓小白  阅读(400)  评论(0编辑  收藏  举报