欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringBoot之拦截器的配置

程序员文章站 2022-07-09 18:18:04
...

什么是拦截器

拦截器(Inteceptor)可以拦截Action请求, 可以判断后决定请求是否通过, 并在请求前、请求后、视图渲染后执行自定义的操作. 试想下: 你在一台新设备上想通过网页登陆QQ空间, 那势必要先在登陆界面通过登陆验证吧? 你不登陆就直接访问空间地址, 那你这个访问请求就会被"拦截"并告知你尚未登陆!

配置过程

新建SpringBoot项目, 这里端口我习惯改成8001
SpringBoot之拦截器的配置
项目的完整结构如下:
SpringBoot之拦截器的配置
先写一个类让它实现HandlerInterceptor接口:

public class FirstInteceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("我是拦路虎");
        return true;
    }
}

SpringBoot之拦截器的配置
紧接着写它的配置类, 做添加拦截路径等工作:
别忘了写@Component注解,把它注册到Spring容器中

@Component
public class InteceptorConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new FirstInteceptor()).
                addPathPatterns("/a/*").
                excludePathPatterns("/a/b/*");
    }
}

SpringBoot之拦截器的配置
剩下的只要写一个处理器了:

@RestController
public class HelloController {

    @RequestMapping("/a/b")
    public String goodMorning(){
        return "早上好!";
    }

    @RequestMapping("/a/b/c")
    public String goodAfternoon(){
        return "下午好!";
    }
}

SpringBoot之拦截器的配置

测试结果

在浏览器中访问地址如下, 这个路径会被拦截, 拦截后放行
SpringBoot之拦截器的配置
浏览器响应如下:
SpringBoot之拦截器的配置
控制台响应如下:
SpringBoot之拦截器的配置
拦截成功!
那么,我们换成另一个不会被拦截的路径:
SpringBoot之拦截器的配置
浏览器响应如下:
SpringBoot之拦截器的配置
控制台没有输出,说明未被拦截,正如所愿!

补充

preHandle是在请求完成前执行的方法, 常用的还有个postHandle方法,那是在请求完成后执行的方法,配置起来也是同理