• 峰哥说技术:16-Spring Boot 注册拦截器


    Spring Boot深度课程系列

    峰哥说技术—2020庚子年重磅推出、战胜病毒、我们在行动

    12  峰哥说技术:Spring Boot 注册拦截器

    拦截器的原理很简单,是 AOP 的一种实现,专门拦截对动态资源的后台请求,即拦截对控制层的请求。使用场景比较多的是判断用户是否有权限请求后台,更拔高一层的使用场景也有,比如拦截器可以结合 websocket 一起使用,用来拦截 websocket 请求,然后做相应的处理等等。

    Spring Boot中拦截器的使用比较简单,分为两步,一是定义拦截器,二是配置拦截器即可。下面通过一个案例来说明.

    案例:拦截器的简单使用。

    步骤:

    1)创建Spring Boot项目,添加web依赖。

    2)定义拦截器MyIntercepter

    public class MyInterceptor implements HandlerInterceptor {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

            System.out.println("preHandle(),在Controller方法之前执行========>");
            //返回true继续执行,否则取消当前请求
            return true;
        }

        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
            System.out.println("postHandle(),执行Controller后面的接口方法后调用,但是视图还没有被渲染=======>");
        }

        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
            System.out.println("整个请求处理完毕,视图也渲染完毕,做清理工作======>");
        }
    }

    3)定义拦截器MyIntercepterConfig,实现WebMvcConfigurer接口即可。

    Spring Boot 2.0 之前,我们都是直接继承 WebMvcConfigurerAdapter 类,然后重写 addInterceptors 方法来实现拦截器的配置。但是在 Spring Boot 2.0 之后,该方法已经被废弃了(当然,也可以继续用),取而代之的是 WebMvcConfigurationSupport和WebMvcConfigurer。但是WebMvcConfigurationSupport对于静态资源会被拦截。因此建议使用WebMvcConfigurer,它不会导致静态资源被拦截的问题。

    @Configuration
    public class WebMvcConfig implements WebMvcConfigurer{
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new MyInterceptor())
                    .addPathPatterns("/**")
                    .excludePathPatterns("/test");
        }
    }

    这里的addPathPatterns("/**"),是请求的映射规则,excludePathPatterns("/test")表示被排除拦截路径。
    编写IndexController类

    @RestController
    public class IndexController {
        @GetMapping("/hello")
        public String hello(){
            return "hello Spring Boot";
        }
        @GetMapping("/test")
        public String hello1(){
            return "hello Spring test";
        }
    }

    4)测试:在浏览器中输入http://localhost:8080/hello,浏览器和控制台结果如下:

     

    在浏览器中输入http://localhost:8080/test,浏览器和控制台结果如下:

     

    这说明/test路径请求真的被排除。

  • 相关阅读:
    HTML导航条的制作
    图片样式加hover特效
    用表格制作商品购买页面--(table)
    CSS-盒子模型
    一些常见css样式加选择器
    css的一些样式
    HTML基本代码
    element-ui的tab切换同步步骤条 字符串转数字 数字转字符串
    vuex相关知识笔记
    js: 数组方法(中级)
  • 原文地址:https://www.cnblogs.com/027kgc/p/12502212.html
Copyright © 2020-2023  润新知