在项目开发中我们常常需要对请求进行验证,如登录校验、权限验证、防止重复提交等等,通过拦截器来过滤请求。自定义一个拦截器需要实现HandlerInterceptor接口。
代码如下:

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** 自定义拦截器,如身份验证、权限控制、登录拦截等、* 1、实现HandlerInterceptor* 2、实现Spring的WebRequestInterceptor*/
public class HttpInterceptor implements HandlerInterceptor {/*** 请求执行之前进行调用,对请求进行预处理,* 返回true之后可继续往下执行调用下一个Interceptor。或者Controller* ,返回false终止请求*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("请求前拦截");return true;}/*** 执行完Controller之后 && DispatcherServlet进行视图渲染之前执行*/@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("请求完成后的操作...");}/*** DispatcherServlet渲染之后取执行。可以用于资源清理等工作*/@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("视图渲染之后...");}
}

此时我们还需要创建一个类来实现WebMvcConfigurer,并重写addInterceptors方法。将前面定义的拦截器添加到InterceptorRegistry中。
除此之外我们还可以继承WebMvcConfigurerAdapter 或者继承WebMvcConfigurationSupport。但是WebMvcConfigurerAdapter在2.0版本被标记了@Deprecated,意味着在未来版本中可能会取消。代码如下

/*** WebMvcConfigurerAdapter 自定义拦截器集成WebMvcConfigurerAdapter,SpringBoot 2.0 后,该类被标记为@Deprecated.后的版本中会被取消* 解决办法* 1、实现WebMvcConfigurer (推荐)* 2、继承WebMvcConfigurationSupport*/
// 该注解表示将类交给spring进行管理
@Configuration
public class WebAppConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {/*** 可以添加多个拦截器*/registry.addInterceptor(new HttpInterceptor()).addPathPatterns("/**");/*** 也可以添加多个拦截器* registry.addInterceptor(new HttpInterceptor1());*/}
}

添加一个Controller

 /*** RequestMapping 将Http请求映射到方法上*/@RequestMapping("/")public String HelloWorld() {System.out.println("Http请求已发出");return "Hello World";}

启动项目,访问localhost:8080.观察控制台,发现如下所示

2019-01-06 00:32:32.168  INFO 69288 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2019-01-06 00:32:32.168  INFO 69288 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2019-01-06 00:32:32.173  INFO 69288 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 5 ms
请求前拦截
Http请求已发出
请求完成后的操作...
视图渲染之后...

意味着我们自定义的拦截器成功生效了。


欢迎关注我的公众号:程序员共成长

 公众号内回复【礼包】,获取程序员专属资料,包括但不限于Java、Python、Linux、数据库、大数据、架构、测试、前端、ui以及各方向电子书

转载于:https://www.cnblogs.com/wyl-0120/p/10316269.html

SpringBoot从零单排 ------ 拦截器的使用相关推荐

  1. springBoot之过滤器和拦截器的使用

    在springBoot中,过滤器和拦截器的使用. 过滤器 概述 过滤器是什么? 简单的来说,过滤器就是过滤的作用,在web开发中过滤一些我们指定的url. 过滤器主要做什么? 过滤掉一些不需要的东西, ...

  2. springboot中配置了拦截器后,拦截器无效的解决方案之一

    springboot中配置了拦截器后,拦截器无效的解决方案之一 参考文章: (1)springboot中配置了拦截器后,拦截器无效的解决方案之一 (2)https://www.cnblogs.com/ ...

  3. 在SpringBoot项目中整合拦截器

    拦截器在Web系统中非常常见,对于某些全局统一的操作,我们可以把它提取到拦截器中实现.总结起来,拦截器大致有以下几种使用场景: 1.权限检查:如登录检测,进入处理程序检测用户是否登录,如果没有,则直接 ...

  4. SpringBoot实现过滤器、拦截器与切片

    作者:七印miss juejin.im/post/5c6901206fb9a049af6dcdcf Q:使用过滤器.拦截器与切片实现每个请求耗时的统计,并比较三者的区别与联系 过滤器Filter 过滤 ...

  5. SpringBoot实现过滤器、拦截器与切片源码分析

    过滤器Filter 过滤器概念 Filter是J2E中来的,可以看做是Servlet的一种"加强版",它主要用于对用户请求进行预处理和后处理,拥有一个典型的处理链.Filter也可 ...

  6. 如何在SpringBoot项目中使用拦截器

    相比springmvc,springboot中拦截器不需要在xml中配置,只需定义拦截器类 implements HandlerInterceptor 和拦截器拦截路径的配置类extends WebM ...

  7. SpringBoot 优雅的配置拦截器方式

    作者:攻城狮-飞牛 my.oschina.net/bianxin/blog/2876640 其实spring boot拦截器的配置方式和springMVC差不多,只有一些小的改变需要注意下就ok了. ...

  8. 玩转 SpringBoot 2 快速整合拦截器

    概述 首先声明一下,这里所说的拦截器是 SpringMVC 的拦截器(HandlerInterceptor).使用SpringMVC 拦截器需要做如下操作: 创建拦截器类需要实现 HandlerInt ...

  9. 第六章:如何在SpringBoot项目中使用拦截器

    拦截器对使用SpringMvc.Struts的开发人员来说特别熟悉,因为你只要想去做好一个项目必然会用到它.拦截器在我们平时的项目中用处有很多,如:日志记录(我们后续章节会讲到).用户登录状态拦截.安 ...

最新文章

  1. Swift直接解析YApi接口为模型
  2. 【软件测试工程师】关于软件测试术语的定义,软件测试中的分类
  3. 系统的crontab设定:/etc/crontab
  4. ios 横向滚轮效果_ios横向菜单+页面滑动
  5. mysql---复杂的sql语句join的使用(left join,right join)
  6. bean交个spring和new比较区别
  7. 机器学习从入门到精通150讲(一)-推荐系统经典模型Wide Deep(附部分代码)
  8. 单片机c语言 i%3c%3c1,单片机C语言作业及上机习题及答案
  9. Word2010使用技巧之四:页眉的另类使用
  10. 经典故障:四个雷,3*2*2*3种随机方法的特殊恢复案例
  11. 思科交换技术之vlan
  12. C# asp.net mvc,做 301 永久重定向!
  13. WiFi偏门协议(四):增强的传输机制802.11aa
  14. 你听过“费斯汀格法则”吗?多少人因为不懂而被残害!好文!
  15. 由于目标计算机积极拒绝,无法连接。 Could not connect to Redis at 127.0.0.1:6379: 由于目标计算机积极拒绝,无法连接
  16. XP系统定时关机命令
  17. java达内项目_达内IT学院举办Java互联网架构师项目峰会
  18. java窗口如何定时关闭_[Java教程]【温故而知新】Javascript窗口效果 (全屏显示窗口、定时关闭窗口)_星空网...
  19. 从.Net类库代码来看Asp.net运行时(转自酷网动力)
  20. IDEA乱码问题(jdk18)

热门文章

  1. C语言标准库<limits.h>
  2. vuejs知乎_你也许不知道的Vuejs - 深入浅出响应式系统
  3. pytorch torch.nn.Module.register_buffer
  4. SQLAlchemy orm.query.Query
  5. Pandas DataFrame GroupBy.Apply
  6. Web_audio_spatialization_basics
  7. opencv 直方图
  8. Pandas 通用方法
  9. vSAN6.2 性能服务
  10. VMware NSX词汇表