spring boot--拦截器实现
spring boot给我们提供了一个HandlerInteceptor接口帮助我们实现拦截器功能。
在HandlerInteceptor接口中,一共有三个default方法(这是jdk8的新特性,用来在接口中编写带有方法体的方法。实现接口可以不重写default方法,默认调用的仍是接口中的default方法体)
public interface HandlerInterceptor {default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {return true;}default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {}default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {} }
boolean preHandle:会在controller处理前调用该方法,方法返回true则进入对应的controller。方法返回false则不会进入controller。可以用来编码,安全控制,权限校验等。
void postHandle:在controller处理完成返回ModelAndView后执行。此时还没有进行视图渲染,还可以修改ModelAndView。
void afterCompletion:整个请求已经处理完成了,可能返回了正常的请求结果,也可能返回一个异常。
下面我们来做一个简单的demo。
先定义一个controller:
@RestController public class UserController {@GetMapping("users/{id}")public String getUser(@PathVariable("id") String id) {System.out.println("controller[url=users/" + id + "]");return "testUser";}@GetMapping("users/login")public String test(User user, Model model) {System.out.println("controller[url=users/login]");model.addAttribute("id", user.getId());model.addAttribute("name", user.getName());model.addAttribute("password", user.getPassword());model.addAttribute("mail", user.getMail());return "index";} }
里面提供了两个请求链接:/users/{id}和/users/login,这里为了简单方便,我们均将请求方式设置为get。
定义一个拦截器UserInteceptor(这里先测试第一个方法preHandle):
@Component public class UserInteceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("preHandle;");Map<String, String[]> map = request.getParameterMap();map.forEach((k, v) -> {System.out.println("[Key=" + k + ";Value=" + StringUtils.join(v) + "];");});return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("postHandle");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("afterCompletion");} }
然后将拦截器添加进容器中,设定它的拦截路径为/users/**:
@Configuration public class InteceptorConfig implements WebMvcConfigurer {@Autowiredprivate UserInteceptor userInteceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(userInteceptor).addPathPatterns("/users/*");} }
就此一个简单的项目已经构成,我们启动程序,然后访问/users/login?id=1&username=yxf&password=123&mail=5@qq.com
可以看到访问结果:
preHandle; //----------------------------调用了preHandle方法 [Key=id;Value=1]; //---------------------打印request中的id [Key=name;Value=yxf]; //-----------------打印request中的name [Key=password;Value=123]; //-------------打印request中的password [Key=mail;Value=5@qq.com]; //------------打印request中的mail controller[url=users/login] //-----------在preHandle之后,这里进入UserController的test方法。 postHandle //----------------------------controller处理完成后调用PostHandle方法。//---------------在这中间其实还有dispatchServlet调用视图解析器对View的解析等------------------ afterCompletion //-----------------------postHandle处理完成后调用afterCompletion。
顺序是按照preHandle→Controller→postHandle→视图渲染器→afterCompletion的顺序执行。
转载于:https://www.cnblogs.com/yxth/p/10865396.html
spring boot--拦截器实现相关推荐
- Spring Boot拦截器(WebMvcConfigurerAdapter)
直接按我的步骤走都没有问题: 1 配置自定义的拦截器: package com.configs;import org.slf4j.Logger; import org.slf4j.LoggerFact ...
- 解决Spring Boot 拦截器注入service为空的问题
解决Spring Boot 拦截器注入service为空的问题 参考文章: (1)解决Spring Boot 拦截器注入service为空的问题 (2)https://www.cnblogs.com/ ...
- 使用spring boot拦截器实现青少年模式
思路方法一: 便用Spring Boot拦截器采累计在线时间采实现青少年模式的步骤,可以参考以卜步骤: 1.创建一个拦截器类,实现Handlerlnterceptor 接口. 2.在拦截器类中,定义一 ...
- spring boot 拦截器获取controller返回的数据_高级码农Spring Boot实战与进阶之过滤器和拦截器的使用及其区别...
众所周知的Spring Boot是很优秀的框架,它的出现简化了新Spring应用的初始搭建以及开发过程,大大减少了代码量,目前已被大多数企业认可和使用.这个专栏将对Spring Boot框架从浅入深, ...
- Spring boot拦截器登录检查
拦截器 进行登录检查 从登录页面跳转到成功页面之后 为了防止表单重复提交 配置视图映射,利用重定向到成功页面 此时,在浏览器直接输入,配置的视图映射地址 也可以直接映射.跳转到成功页面 登录页面,也就 ...
- Spring Boot 拦截器
(一)拦截器概述 1.1拦截器介绍 拦截器的作用类似于Servlet 中的Filter,都可以用于对处理器进行预处理和后处理.在Spring MVC 与Spring Boot 中使用拦截器一般是实现H ...
- Spring Boot拦截器(Interceptor)详解
写了那么久的博客,始于Python爬虫,目前专于Java学习,终于有了属于自己的小窝,欢迎各位访问我的个人网站. 文章目录 Interceptor 介绍 Interceptor 作用 自定义 Inte ...
- Spring Boot 拦截器无效,不起作用
这个问题一般是解决WebMvcConfigurerAdapter过时问题造成的.导致这个问题可能有两个原因:一个是拦截器写错了,另一个是拦截器配置错了. 1.需求是这样的 拦截所有的api请求,判断其 ...
- java 拦截器响应中取所有参数,spring boot拦截器中获取request post请求中的参数
最近有一个需要从拦截器中获取post请求的参数的需求,这里记录一下处理过程中出现的问题. 首先想到的就是request.getParameter(String )方法,但是这个方法只能在get请求中取 ...
- spring boot拦截器 过滤器
1.拦截器 登录拦截 自定义拦截路径 //全局配置继承WebMvcConfigurer接口 @Configuration public class MyHandler implements WebMv ...
最新文章
- Maven中jar包冲突的解决方式
- 《编写高质量代码:改善Java程序的151个建议》笔记
- HTML IFRAME 用法小总结
- spring 循环依赖_简单说说 Spring 的循环依赖
- Label 表达式绑定
- 深入浅出VC++串口编程--短信应用开发
- 罗永浩推出新一代坚果手机,比AI亮眼的是AV能力
- 分享一份自己整理的PPT--数据分析师的业务流程和常规思维
- android shn1 获取_华为光猫获得Root Shell(shell的root权限)详细说明,接力sdgaojian发帖。...
- WT2003H语音芯片在红绿灯上的运用,一款可远程更新的语音IC方案
- linux shell 切换目录,如何在Shell中快速切换目录?
- Python爬虫入门教程 7-100 蜂鸟网图片爬取之二 1
- nginx配置前端网站
- AutoCAD .Net 颜色系统
- SAP常见问题与解决办法(转)
- 虚拟机设置共享文件夹
- MatConvNet的CPU和GPU编译配置
- Qt获取当前系统时间和时间戳及其之间转换
- Android S XTS 测试入门
- windows安全警报怎么关闭_永久关闭WIN10自动杀毒(windows安全中心)
热门文章
- python随机生成中文句子_python – 如何使用NLTK从诱导语法中生成句子?
- 绘制箱线图的标签python_利用Python - Matplotlib 绘制箱线图
- python pandas 读取数据库_数据分析-pandas从数据库读取数据
- 乱世寻龙java_乱世王者寻龙季怎么玩?乱世王者寻龙季玩法技巧一览
- au人声处理_如何使用AU软件为视频降噪?
- linux执行多个命令_您必须知道的前50多个Linux命令
- sql主键_SQL主键
- linux islower_Python字符串islower()
- Android ViewModel
- iOS UISearchController和UITableView