SpringBoot 知识点目录: SpringBoot 核心知识点整理!
拦截器介绍
拦截器的作用:通过拦截执行中通用的代码逻辑,来减少控制器中的代码冗余。
拦截器的特点:
- 只能拦截控制器的相关请求,不能拦截静态资源和页面的相关请求(css、img)
- 请求发送经过拦截器响应回来同样经过拦截器
- 拦截器中断用户的请求
- 拦截器可以针对性拦截某些控制器请求
拦截器开发
开发一个自己的拦截器类,要求实现 HandlerInterceptor
;
preHandler
在controller
执行之前,进行拦截,通过返回值判断是否放行。
返回值true
表示放行,然后去执行controller
中的代码。
返回值false
表示拦截,不再继续执行后续代码。postHandler
请求过程中处理controller
执行之后的操作。afterCompletion
最终处理。
开发拦截器 MyInterceptor
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("---------1----------");
return true; // true代表放行, false表示拦截住
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("---------3----------");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("---------4----------");
}
}
开发控制器 HelloController
@RestController
@RequestMapping("/hello")
public class HelloController {
@RequestMapping("/hello")
public String hello() {
System.out.println("---------2----------");
return "hello";
}
@RequestMapping("world")
public String world() {
System.out.println("-------world--------");
return "world";
}
}
配置拦截器 InterceptorConfig
@Configuration
public class InterceptorConfig extends WebMvcConfigurationSupport {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor()) // 添加拦截器
.addPathPatterns("/hello/**") // 添加l拦截的请求路径
.excludePathPatterns("/hello/world"); // 添加排除哪些请求路径不经过拦截器
}
}
运行
首先在 preHandle
中进行拦截,上述代码为 true
表示放行,则开始执行 HelloController
中的代码,执行完控制器之后再去执行 postHandle
中的代码,整个过程结束以后再执行 afterCompletion
中的代码。
---------1----------
---------2----------
---------3----------
---------4----------