SpringBoot从零单排 ------ 拦截器的使用
在项目开发中我们常常需要对请求进行验证,如登录校验、权限验证、防止重复提交等等,通过拦截器来过滤请求。自定义一个拦截器需要实现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从零单排 ------ 拦截器的使用相关推荐
- springBoot之过滤器和拦截器的使用
在springBoot中,过滤器和拦截器的使用. 过滤器 概述 过滤器是什么? 简单的来说,过滤器就是过滤的作用,在web开发中过滤一些我们指定的url. 过滤器主要做什么? 过滤掉一些不需要的东西, ...
- springboot中配置了拦截器后,拦截器无效的解决方案之一
springboot中配置了拦截器后,拦截器无效的解决方案之一 参考文章: (1)springboot中配置了拦截器后,拦截器无效的解决方案之一 (2)https://www.cnblogs.com/ ...
- 在SpringBoot项目中整合拦截器
拦截器在Web系统中非常常见,对于某些全局统一的操作,我们可以把它提取到拦截器中实现.总结起来,拦截器大致有以下几种使用场景: 1.权限检查:如登录检测,进入处理程序检测用户是否登录,如果没有,则直接 ...
- SpringBoot实现过滤器、拦截器与切片
作者:七印miss juejin.im/post/5c6901206fb9a049af6dcdcf Q:使用过滤器.拦截器与切片实现每个请求耗时的统计,并比较三者的区别与联系 过滤器Filter 过滤 ...
- SpringBoot实现过滤器、拦截器与切片源码分析
过滤器Filter 过滤器概念 Filter是J2E中来的,可以看做是Servlet的一种"加强版",它主要用于对用户请求进行预处理和后处理,拥有一个典型的处理链.Filter也可 ...
- 如何在SpringBoot项目中使用拦截器
相比springmvc,springboot中拦截器不需要在xml中配置,只需定义拦截器类 implements HandlerInterceptor 和拦截器拦截路径的配置类extends WebM ...
- SpringBoot 优雅的配置拦截器方式
作者:攻城狮-飞牛 my.oschina.net/bianxin/blog/2876640 其实spring boot拦截器的配置方式和springMVC差不多,只有一些小的改变需要注意下就ok了. ...
- 玩转 SpringBoot 2 快速整合拦截器
概述 首先声明一下,这里所说的拦截器是 SpringMVC 的拦截器(HandlerInterceptor).使用SpringMVC 拦截器需要做如下操作: 创建拦截器类需要实现 HandlerInt ...
- 第六章:如何在SpringBoot项目中使用拦截器
拦截器对使用SpringMvc.Struts的开发人员来说特别熟悉,因为你只要想去做好一个项目必然会用到它.拦截器在我们平时的项目中用处有很多,如:日志记录(我们后续章节会讲到).用户登录状态拦截.安 ...
最新文章
- Swift直接解析YApi接口为模型
- 【软件测试工程师】关于软件测试术语的定义,软件测试中的分类
- 系统的crontab设定:/etc/crontab
- ios 横向滚轮效果_ios横向菜单+页面滑动
- mysql---复杂的sql语句join的使用(left join,right join)
- bean交个spring和new比较区别
- 机器学习从入门到精通150讲(一)-推荐系统经典模型Wide Deep(附部分代码)
- 单片机c语言 i%3c%3c1,单片机C语言作业及上机习题及答案
- Word2010使用技巧之四:页眉的另类使用
- 经典故障:四个雷,3*2*2*3种随机方法的特殊恢复案例
- 思科交换技术之vlan
- C# asp.net mvc,做 301 永久重定向!
- WiFi偏门协议(四):增强的传输机制802.11aa
- 你听过“费斯汀格法则”吗?多少人因为不懂而被残害!好文!
- 由于目标计算机积极拒绝,无法连接。 Could not connect to Redis at 127.0.0.1:6379: 由于目标计算机积极拒绝,无法连接
- XP系统定时关机命令
- java达内项目_达内IT学院举办Java互联网架构师项目峰会
- java窗口如何定时关闭_[Java教程]【温故而知新】Javascript窗口效果 (全屏显示窗口、定时关闭窗口)_星空网...
- 从.Net类库代码来看Asp.net运行时(转自酷网动力)
- IDEA乱码问题(jdk18)
热门文章
- C语言标准库<limits.h>
- vuejs知乎_你也许不知道的Vuejs - 深入浅出响应式系统
- pytorch torch.nn.Module.register_buffer
- SQLAlchemy orm.query.Query
- Pandas DataFrame GroupBy.Apply
- Web_audio_spatialization_basics
- opencv 直方图
- Pandas 通用方法
- vSAN6.2 性能服务
- VMware NSX词汇表