(一)拦截器概述

1.1拦截器介绍

拦截器的作用类似于Servlet 中的Filter,都可以用于对处理器进行预处理和后处理。在Spring MVC 与Spring Boot 中使用拦截器一般是实现HandlerInterceptor 接口。

下面是去掉注释后的源码。HandlerInterceptor 接口提供了三个方法。下面分别对这三个方法作具体介绍。

public interface HandlerInterceptor {boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception;void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)throws Exception;void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception;}

1.2拦截器中的三个方法

preHandle():这个方法可以实现处理器的预处理,也就是它会在handler 方法执行之前就开始执行。当返回值是true 时表示继续执行,返回false 时则不会执行后续的拦截器或处理器。
作用:身份验证,身份授权等。

postHandle():这个方法是后处理回调方法,也就是在控制器完成后(试图渲染之前)执行。
作用:将公用的模型数据传到视图,也可以在这里统一指定视图(菜单导航等)。

afterCompletion():这个方法是请求处理完毕后的回调方法,即在视图渲染完毕时调用。
作用:进行统一的异常处理,日志处理等。

(二)在Spring Boot 中使用拦截器

2.1使用步骤

  1. 写一个拦截器实现HandlerInterceptor 接口。
  2. 再写一个类继承WebMvcConfigurerAdapter 接口,重写其中的addInterceptors() 方法。调用registry.addInterceptor() 方法注册该拦截器。

2.2简单实现

拦截器MyHandlerInterceptor

public class MyHandlerInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {System.out.println("== preHandle ==");return true;}@Overridepublic void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {System.out.println("== postHandle ==");}@Overridepublic void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {System.out.println("== afterCompletion ==");}
}

注册拦截器WebConfiguration

@SpringBootConfiguration
public class WebConfiguration extends WebMvcConfigurerAdapter {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new MyHandlerInterceptor()).addPathPatterns("/**");}
}

控制器TestController

@RestController
public class TestController {@GetMapping("/helllo")@ResponseBodypublic String test(){System.out.println("== Controller ==");return "Hello World!";}
}

PS:在使用拦截器的时候,要注意让入口类扫描到该拦截器,入口类默认扫描的包是与入口类同级的包与其子包。
在访问”hello” 时,控制台的输出如下:

参考博文
http://jinnianshilongnian.iteye.com/blog/1670856/

Spring Boot 拦截器相关推荐

  1. Spring Boot拦截器(WebMvcConfigurerAdapter)

    直接按我的步骤走都没有问题: 1 配置自定义的拦截器: package com.configs;import org.slf4j.Logger; import org.slf4j.LoggerFact ...

  2. 解决Spring Boot 拦截器注入service为空的问题

    解决Spring Boot 拦截器注入service为空的问题 参考文章: (1)解决Spring Boot 拦截器注入service为空的问题 (2)https://www.cnblogs.com/ ...

  3. 使用spring boot拦截器实现青少年模式

    思路方法一: 便用Spring Boot拦截器采累计在线时间采实现青少年模式的步骤,可以参考以卜步骤: 1.创建一个拦截器类,实现Handlerlnterceptor 接口. 2.在拦截器类中,定义一 ...

  4. spring boot 拦截器获取controller返回的数据_高级码农Spring Boot实战与进阶之过滤器和拦截器的使用及其区别...

    众所周知的Spring Boot是很优秀的框架,它的出现简化了新Spring应用的初始搭建以及开发过程,大大减少了代码量,目前已被大多数企业认可和使用.这个专栏将对Spring Boot框架从浅入深, ...

  5. Spring boot拦截器登录检查

    拦截器 进行登录检查 从登录页面跳转到成功页面之后 为了防止表单重复提交 配置视图映射,利用重定向到成功页面 此时,在浏览器直接输入,配置的视图映射地址 也可以直接映射.跳转到成功页面 登录页面,也就 ...

  6. Spring Boot拦截器(Interceptor)详解

    写了那么久的博客,始于Python爬虫,目前专于Java学习,终于有了属于自己的小窝,欢迎各位访问我的个人网站. 文章目录 Interceptor 介绍 Interceptor 作用 自定义 Inte ...

  7. Spring Boot 拦截器无效,不起作用

    这个问题一般是解决WebMvcConfigurerAdapter过时问题造成的.导致这个问题可能有两个原因:一个是拦截器写错了,另一个是拦截器配置错了. 1.需求是这样的 拦截所有的api请求,判断其 ...

  8. java 拦截器响应中取所有参数,spring boot拦截器中获取request post请求中的参数

    最近有一个需要从拦截器中获取post请求的参数的需求,这里记录一下处理过程中出现的问题. 首先想到的就是request.getParameter(String )方法,但是这个方法只能在get请求中取 ...

  9. spring boot拦截器 过滤器

    1.拦截器 登录拦截 自定义拦截路径 //全局配置继承WebMvcConfigurer接口 @Configuration public class MyHandler implements WebMv ...

最新文章

  1. css中的代码图标,认识CSS中字体图标(示例代码)
  2. Python中断多重循环的几种思路
  3. 基于区块链的健康链系统设计与实现(6)结束语
  4. 通用mapper笔记
  5. 从零开始搭建spring-cloud(0) --springboot与springcloud的关系
  6. 前标识(NT AUTHORITY\NETWORK SERVICE)没有对 (转)
  7. Kubernetes应用程序开发认证(CKAD) 经验分享
  8. 软件oem要注意什么_租房软件有哪些 租房有什么需要注意的地方
  9. 方法调用_thinkphp跨模块调用方法
  10. android问卷分页显示,基于Android的问卷调查客户端题目分页加载实现.doc
  11. 什么是面向接口编程?
  12. vue 项目 build 之后dist文件下的index.html不显示内容,并且报 Failed to load resource: net::ERR_FILE_NOT_FOUND 错误
  13. Ps橡皮擦的使用说明
  14. 判断文本框输入中文超过10个英文数字超过20个
  15. 创建基于vue的H5
  16. 【喜讯】 第1期送书活动获奖名单,看看都是谁!
  17. HOTMAIL模拟登陆
  18. java super构造函数_Java为什么this()和super()必须是构造函数中的第一条语句?...
  19. Java技巧之双括弧初始化
  20. 使用ffmpeg在视频中心添加透明水印

热门文章

  1. Eureka出现No instances available for xxx的五种解决方案(不能解决你骂我)
  2. Go——Artifactory的AQL查询以及json解析解决方案
  3. Tensorflow——[AttributeError:module tensorflow no attribute app]解决方案
  4. Little Sub and Applese
  5. promise的应用和在VUE中使用axios发送AJAX请求服务器
  6. Hadoop和Spark生态圈了解
  7. Cookie和Session-学习笔记01【Cookie_快速入门、Cookie_细节】
  8. Android复习13【广播:思维导图、音乐播放器】
  9. Unable to execute dex: Multiple dex files define Lcom/kenai/jbosh/AbstractAttr
  10. Mybatis的核心——SqlSession解读