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终止请求
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("请求前拦截");
return true;
} /**
* 执行完Controller之后 && DispatcherServlet进行视图渲染之前执行
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("请求完成后的操作...");
} /**
* DispatcherServlet渲染之后取执行。可以用于资源清理等工作
*/
@Override
public 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 { @Override
public 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以及各方向电子书
SpringBoot从零单排 ------ 拦截器的使用的更多相关文章
- springboot(五)过滤器和拦截器
前言 过滤器和拦截器二者都是AOP编程思想的提现,都能实现诸如权限检查.日志记录等.二者有一定的相似之处,不同的地方在于: Filter是servlet规范,只能用在Web程序中,而拦截器是Sprin ...
- 如何在SpringBoot项目中使用拦截器
相比springmvc,springboot中拦截器不需要在xml中配置,只需定义拦截器类 implements HandlerInterceptor 和拦截器拦截路径的配置类extends WebM ...
- springboot中配置了拦截器后,拦截器无效的解决方案之一
springboot的启动类xxxApplication不能扫描到拦截器配置类,可加上@ComponentScan(basePackages={"com.maya.common"} ...
- SpringBoot静态资源访问+拦截器+Thymeleaf模板引擎实现简单登陆
在此记录一下这十几天的学习情况,卡在模板引擎这里已经是四天了. 对Springboot的配置有一个比较深刻的认识,在此和大家分享一下初学者入门Spring Boot的注意事项,如果是初学SpringB ...
- springBoot 2.X-自定义拦截器
package com.cx.springboot.myInter; import javax.servlet.http.HttpServletRequest; import javax.servle ...
- springboot 2.0+ 自定义拦截器
之前项目的springboot自定义拦截器使用的是继承WebMvcConfigurerAdapter重写常用方法的方式来实现的. 以下WebMvcConfigurerAdapter 比较常用的重写接口 ...
- 玩转SpringBoot之整合Mybatis拦截器对数据库水平分表
利用Mybatis拦截器对数据库水平分表 需求描述 当数据量比较多时,放在一个表中的时候会影响查询效率:或者数据的时效性只是当月有效的时候:这时我们就会涉及到数据库的分表操作了.当然,你也可以使用比较 ...
- 玩转 SpringBoot 2 快速整合拦截器
概述 首先声明一下,这里所说的拦截器是 SpringMVC 的拦截器 HandlerInterceptor.使用SpringMVC 拦截器需要做如下操作: 创建拦截器类需要实现 HandlerInte ...
- springboot(五).如何在springboot项目中使用拦截器
在每个项目中,拦截器都是我们经常会去使用的东西,基本上任一一个项目都缺不了拦截器的使用. 如日志记录.登录验证,session验证等,都需要拦截器来拦截URL请求,那springboot中的拦截器是如 ...
随机推荐
- Hive入门学习--HIve简介
现在想要应聘大数据分析或者数据挖掘岗位,很多都需要会使用Hive,Mapreduce,Hadoop等这些大数据分析技术.为了充实自己就先从简单的Hive开始吧.接下来的几篇文章是记录我如何入门学习Hi ...
- PCA算法和python实现
第十三章 利用PCA来简化数据 一.降维技术 当数据的特征很多的时候,我们把一个特征看做是一维的话,我们数据就有很高的维度.高维数据会带来计算困难等一系列的问题,因此我们需要进行降维.降维的好处有很多 ...
- Eclipse下Maven新建Web项目index.jsp报错完美解决(war包)
Eclipse下Maven新建Web项目步骤 1. 2. 3. 4. 5. 问题描述 最近用eclipse新建了一个maven项目,结果刚新建完成index.jsp页面就报错了,先把错误信息贴出来看看 ...
- 源码安装xadmin及使用
xadmin是django的第三方后台 我们也可以使用pip来安装,但是推荐使用源码安装. 因为有些新功能以及发布在GitHub上,但是还未发布到pypi上,我们就可以提取使用这些功能. 一.安装 1 ...
- JavaScript 之函数
刚开 始学习 JS 时,挺不习惯它函数的用法,就比如一个 function 里面会嵌套一个 function,对于函数里创建变量的作用域也感到很迷惑,这个的语法和 JAVA 相差太多,为此,阅读了&l ...
- 语音识别中的CTC算法的基本原理解释
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文作者:罗冬日 目前主流的语音识别都大致分为特征提取,声学模型,语音模型几个部分.目前结合神经网络的端到端的声学模型训练方法主要CTC和基 ...
- 《Linux/Unix系统编程手册》 时间子系统
Linux下操作系统编程有两本经典APUE即<Advanced Programming in the UNIX Environment>和TLPI<The Linux Program ...
- JavaScript设计模式Item 1—多态
多态的实际含义是:同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果.换句话说,给不同的对象发送同一个消息的时候,这些对象会根据这个消息分别给出不同的反馈. 从字面上来理解多态不太容易, ...
- Andoird 自定义ViewGroup实现竖向引导界面
转载请表明出处:http://write.blog.csdn.net/postedit/23692439 一般进入APP都有欢迎界面,基本都是水平滚动的,今天和大家分享一个垂直滚动的例子. 先来看看效 ...
- C++雾中风景9:emplace_back与可变长模板
C++11的版本在vector容器添加了emplace_back方法,相对于原先的push_back方法能够在一定程度上提升vector容器的表现性能.所以我们从STL源码角度来切入,看看这两种方法有 ...