当前位置:   article > 正文

springboot|springboot配置拦截器

spring boot 配置拦截器

springboot配置拦截器

在springboot中配置拦截器大体上分为以下几步
1.引入相关的依赖
2.新建拦截器
3.配置拦截器Bean
虽然网上有很多配置方法,但是我更倾向于官方文件的配置方法,在以后的DEMO中也会是尽量和官方文档进行贴合
参考文档:https://docs.spring.io/spring/docs/5.2.1.RELEASE/spring-framework-reference/web.html#mvc-config-interceptors

引入依赖

只需要引一个web的依赖就可以了

implementation 'org.springframework.boot:spring-boot-starter-web'

新建拦截器

如果不知道如何新建,可以参考Spring源码中的LocaleChangeInterceptor

  1. /**
  2. * 测试拦截器,继承的类参考 Spring源码中LocaleChangeInterceptor
  3. * 和ThemeChangeInterceptor写法
  4. * @Author https://www.javastudy.cloud
  5. * @CreateTime 2019/11/8
  6. **/
  7. public class TestInterceptor extends HandlerInterceptorAdapter {
  8. /**
  9. * 这个方法在HandlerMapping找到对应的处理对象,但还没有请求这个对象时处理
  10. * 也就是在Controller的方法之前执行
  11. *
  12. * @param request
  13. * @param response
  14. * @param handler 这个参数就是代码着Controller的方法
  15. */
  16. @Override
  17. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  18. System.out.println("run in pre Handle");
  19. return true;
  20. }
  21. /**
  22. * 在Handler/controller的方法处理完逻辑,渲染视图之前执行
  23. *
  24. * @param request
  25. * @param response
  26. * @param handler
  27. * @param modelAndView
  28. */
  29. @Override
  30. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
  31. System.out.println("run in post Handle");
  32. }
  33. /**
  34. * 在视图渲染完之后执行,常用于资源清理等等
  35. *
  36. * @param request
  37. * @param response
  38. * @param handler
  39. * @param ex
  40. */
  41. @Override
  42. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
  43. super.afterCompletion(request, response, handler, ex);
  44. }
  45. }
配置拦截器Bean

不知道如何配置的同学可以参考上述给出的spring官方文档

  1. /**
  2. * @Author https://www.javastudy.cloud
  3. * @CreateTime 2019/11/8
  4. **/
  5. @Configuration
  6. @EnableWebMvc
  7. public class WebConfig implements WebMvcConfigurer {
  8. /**
  9. * 在这里添加自己定义的拦截器
  10. * @param registry
  11. */
  12. @Override
  13. public void addInterceptors(InterceptorRegistry registry) {
  14. registry.addInterceptor(new TestInterceptor())
  15. // 只拦截test路径
  16. .addPathPatterns("/test/**")
  17. // 不拦截pass路径
  18. .excludePathPatterns("/pass/**");
  19. }
  20. }

编写测试的controller

这块就写的很随意了

  1. /**
  2. * @Author https://www.javastudy.cloud
  3. * @CreateTime 2019/11/8
  4. **/
  5. @RestController
  6. public class TestController {
  7. @RequestMapping("test/testInterceptor")
  8. public String testInterceptor(){
  9. System.out.println("in test method");
  10. return "";
  11. }
  12. @RequestMapping("pass/testPass")
  13. public String testPass(){
  14. System.out.println("in pass method");
  15. return "";
  16. }
  17. }

结果输出

走拦截器的情况

不走拦截器的情况

DEMO总评

拦截器是Web中的一大核心概念,我们常常拿拦截器与过滤器进行比较,通过代码可简单总结,拦截器是基于springMVC的,拦截器是只对Controller方法做修改.等等还有很多特性小伙伴们可以自行总结下,常见用法,如文档中所示,可用于本地化,可用于安全验证等等

可添加小刀微信获取源码

往期热文

docker|docker安装redis

数据结构|用java自己手写实现一个栈

springboot|springboot新建aop切面

springboot|springboot配置定时任务及常用的cron表达式

点在看的都没有bug!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/716327
推荐阅读
相关标签
  

闽ICP备14008679号