• 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 }

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

  • 相关阅读:
    Linux内存管理(text、rodata、data、bss、stack&heap)
    名词解释:Linux内存管理之RSS和VSZ
    数据库对比:选择MariaDB还是MySQL?
    linux 下 pip 安装教程
    Mysqlbinlog工具及导出数据并转换编码导入
    运维监控系统之Open-Falcon
    MySQL binlog格式解析
    理解和配置Out of memory: Kill process
    mysql优化——explain详解
    mysql性能优化-慢查询分析、优化索引和配置 (慢查询日志,explain,profile)
  • 原文地址:https://www.cnblogs.com/Mateo-dengmin/p/11994378.html
Copyright © 2020-2023  润新知