什么是拦截器
拦截器(Inteceptor)可以拦截Action请求, 可以判断后决定请求是否通过, 并在请求前、请求后、视图渲染后执行自定义的操作. 试想下: 你在一台新设备上想通过网页登陆QQ空间, 那势必要先在登陆界面通过登陆验证吧? 你不登陆就直接访问空间地址, 那你这个访问请求就会被"拦截"并告知你尚未登陆!
配置过程
新建SpringBoot项目, 这里端口我习惯改成8001
项目的完整结构如下:
先写一个类让它实现HandlerInterceptor接口:
public class FirstInteceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("我是拦路虎");
return true;
}
}
紧接着写它的配置类, 做添加拦截路径等工作:
别忘了写@Component注解,把它注册到Spring容器中
@Component
public class InteceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new FirstInteceptor()).
addPathPatterns("/a/*").
excludePathPatterns("/a/b/*");
}
}
剩下的只要写一个处理器了:
@RestController
public class HelloController {
@RequestMapping("/a/b")
public String goodMorning(){
return "早上好!";
}
@RequestMapping("/a/b/c")
public String goodAfternoon(){
return "下午好!";
}
}
测试结果
在浏览器中访问地址如下, 这个路径会被拦截, 拦截后放行
浏览器响应如下:
控制台响应如下:
拦截成功!
那么,我们换成另一个不会被拦截的路径:
浏览器响应如下:
控制台没有输出,说明未被拦截,正如所愿!
补充
preHandle是在请求完成前执行的方法, 常用的还有个postHandle方法,那是在请求完成后执行的方法,配置起来也是同理