请说明在 Spring Boot 项目里拦截器的使用方式,包括注册和生效的步骤。
考察说明
考察候选人对 Spring Boot 拦截器配置和内部机制的理解。
回答思路
- 【回答框架 1】拦截器通过实现 HandlerInterceptor 接口定义,包含 preHandle、postHandle 和 afterCompletion 三个核心方法。preHandle 在 Controller 方法执行前调用,返回 false 可中断请求。
- 【回答框架 2】在 Spring Boot 中,拦截器需要注册,通常通过实现 WebMvcConfigurer 接口并重写 addInterceptors 方法,调用 registry.addInterceptor(interceptor) 完成注册,同时可以设置 addPathPatterns 和 excludePathPatterns 来指定拦截范围。
- 【回答框架 3】Spring Boot 2.0 及更高版本推荐使用 WebMvcConfigurer 来注册拦截器,避免继承 WebMvcConfigurerAdapter,后者在新版本中已废弃。
- 【回答框架 4】拦截器的执行顺序依据注册顺序,多个拦截器会按照注册顺序依次执行 preHandle,而 postHandle 和 afterCompletion 则逆序执行。
- 【关键点 1】拦截器实现 HandlerInterceptor 接口,可在 preHandle 中控制请求的放行或阻断。
- 【关键点 2】通过实现 WebMvcConfigurer 的 addInterceptors 方法注册拦截器,并细化路径匹配。
- 【关键点 3】拦截器顺序与注册顺序相关,执行时 preHandle 正序、postHandle 和 afterCompletion 逆序。
- 【易错点 1】不注册拦截器不会生效,仅实现接口是不够的。
- 【易错点 2】路径匹配模式使用 Ant 风格,如 '/**',注意精确路径与模式的区别。
- 【易错点 3】preHandle 返回 false 时,后续拦截器和 Controller 不会执行,但已完成的 afterCompletion 会照常调用。