1、拦截器简介

拦截器,请求的接口被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。 拦截器主要用来按照指定规则拒绝请求。

1.1 拦截器中应用

  • Token令牌验证
  • 请求数据校验
  • 用户权限校验
  • 放行指定接口

2、拦截器用法

2.1 编写两个拦截器

自定义类实现HandlerInterceptor接口

2.1.1 OneInterceptor 拦截器

  1. import org.slf4j.Logger;
  2. import org.slf4j.LoggerFactory;
  3. import org.springframework.web.servlet.HandlerInterceptor;
  4. import org.springframework.web.servlet.ModelAndView;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. /**
  8. * 拦截器一
  9. */
  10. public class OneInterceptor implements HandlerInterceptor {
  11. private static final Logger LOGGER = LoggerFactory.getLogger(OneInterceptor.class.getName());
  12. @Override
  13. public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object o) throws Exception {
  14. String url =String.valueOf(request.getRequestURL()) ;
  15. LOGGER.info("1、url=="+url);
  16. // 放开拦截
  17. return true;
  18. }
  19. @Override
  20. public void postHandle(HttpServletRequest httpServletRequest,
  21. HttpServletResponse httpServletResponse,
  22. Object o, ModelAndView modelAndView) throws Exception {
  23. LOGGER.info("1、postHandle");
  24. }
  25. @Override
  26. public void afterCompletion(HttpServletRequest httpServletRequest,
  27. HttpServletResponse httpServletResponse,
  28. Object o, Exception e) throws Exception {
  29. LOGGER.info("1、afterCompletion");
  30. }
  31. }

2.1.2 TwoInterceptor 拦截器

  1. import org.slf4j.Logger;
  2. import org.slf4j.LoggerFactory;
  3. import org.springframework.web.servlet.HandlerInterceptor;
  4. import org.springframework.web.servlet.ModelAndView;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. /**
  8. * 拦截器二
  9. */
  10. public class TwoInterceptor implements HandlerInterceptor {
  11. private static final Logger LOGGER = LoggerFactory.getLogger(TwoInterceptor.class.getName());
  12. @Override
  13. public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object o) throws Exception {
  14. String url =String.valueOf(request.getRequestURL()) ;
  15. LOGGER.info("2、url=="+url);
  16. // 放开拦截
  17. return true;
  18. }
  19. @Override
  20. public void postHandle(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
  21. LOGGER.info("2、postHandle");
  22. }
  23. @Override
  24. public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
  25. LOGGER.info("2、afterCompletion");
  26. }
  27. }

2.2 Web配置文件中注入拦截器

  1. import com.boot.intercept.intercept.OneInterceptor;
  2. import com.boot.intercept.intercept.TwoInterceptor;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
  5. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  6. /**
  7. * Web配置文件
  8. */
  9. @Configuration
  10. public class WebMvcConfig implements WebMvcConfigurer {
  11. public void addInterceptors(InterceptorRegistry registry) {
  12. // 拦截所有路径
  13. // 注册自定义两个拦截器
  14. registry.addInterceptor(new OneInterceptor()).addPathPatterns("/**");
  15. registry.addInterceptor(new TwoInterceptor()).addPathPatterns("/**");
  16. }
  17. }

2.3 编写测试接口

  1. import org.springframework.web.bind.annotation.RequestMapping;
  2. import org.springframework.web.bind.annotation.RestController;
  3. @RestController
  4. public class InterceptController {
  5. @RequestMapping("/reqUrl")
  6. public String reqUrl (){
  7. return "success" ;
  8. }
  9. }

2.4 访问测试接口

日志输出内容如下

  1. intercept.OneInterceptor : 1url==http://127.0.0.1:8005/reqUrl
  2. intercept.TwoInterceptor : 2url==http://127.0.0.1:8005/reqUrl
  3. intercept.TwoInterceptor : 2postHandle
  4. intercept.OneInterceptor : 1postHandle
  5. intercept.TwoInterceptor : 2afterCompletion
  6. intercept.OneInterceptor : 1afterCompletionla

拦截器的拦截顺序,是按照Web配置文件中注入拦截器的顺序执行的。

五:SpringBoot-多个拦截器配置和使用场景的更多相关文章

  1. springmvc以及springboot中的拦截器配置

    拦截器两种实现   如果不同的controller中都需要拦截器,不能使用相同的拦截器,因为拦截器不能跨controller,这个时候只能为不同的controller配置不同的拦截器,每一个拦截器只能 ...

  2. Springboot中SpringMvc拦截器配置与应用(实战)

    一.什么是拦截器,及其作用 拦截器(Interceptor): 用于在某个方法被访问之前进行拦截,然后在方法执行之前或之后加入某些操作,其实就是AOP的一种实现策略.它通过动态拦截Action调用的对 ...

  3. SpringBoot2.0 基础案例(05):多个拦截器配置和使用场景

    一.拦截器简介 1.拦截器定义 拦截器,请求的接口被访问之前,进行拦截然后在之前或之后加入某些操作.拦截是AOP的一种实现策略. 拦截器主要用来按照指定规则拒绝请求. 2.拦截器中应用 Token令牌 ...

  4. SpringBoot整合Mybatis完整详细版二:注册、登录、拦截器配置

    接着上个章节来,上章节搭建好框架,并且测试也在页面取到数据.接下来实现web端,实现前后端交互,在前台进行注册登录以及后端拦截器配置.实现简单的未登录拦截跳转到登录页面 上一节传送门:SpringBo ...

  5. Springboot关于tomcat容器配置、三大组件配置、拦截器配置

    原文地址:http://www.javayihao.top/detail/172 1.tomcat配置 Springboot默认使用的就是嵌入式servlet容器即tomcat,对于web项目,如果使 ...

  6. Springboot 拦截器配置(登录拦截)

    Springboot 拦截器配置(登录拦截) 注意这里环境为springboot为2.1版本 1.编写拦截器实现类,实现接口   HandlerInterceptor, 重写里面需要的三个比较常用的方 ...

  7. Struts2-整理笔记(五)拦截器、拦截器配置

    拦截器(Interceptor) 拦截器是Struts2最强大的特性之一,它是一种可以让用户在Action执行之前和Result执行之后进行一些功能处理的机制. 拦截器的优点 简化了Action的实现 ...

  8. SpringMVC4拦截器配置遇到的坑

    目的:对get请求添加token验证(若为post请求可通过RequestBodyAdvice实现). 情景:因为有api版本管理的需求,重写了WebMvcConfigurationSupport类的 ...

  9. SpringBoot起飞系列-拦截器和统一错误处理(七)

    一.前言 在前边部分我们已经学会了基本的web开发流程,在web开发中,我们通常会对请求做统一处理,比如未登录的用户要拦截掉相关请求,报错页面统一显示等等,这些都需要配置,可以大大简化我们的代码,实现 ...

随机推荐

  1. Javaweb前台界面代码复用总结

    servlet声明定义message信息传给前天界面判断输出message: if(booknamelist.size()==0) { message="根据书名查询没有结果!"; ...

  2. Pytest测试框架(一):pytest安装及用例执行

    PyTest是基于Python的开源测试框架,语法简单易用,有大量的插件,功能非常多.自动检测测试用例,支持参数化,跳过特定用例,失败重试等功能. 安装 pip install -U pytest  ...

  3. 自动化单元测试(Karma + Mocha)

    使用 Karma + Mocha做单元测试 Karma([ˈkɑrmə] 卡玛)是一个测试运行器,它可以呼起浏览器,加载测试脚本,然后运行测试用例 Mocha([ˈmoʊkə] 摩卡)是一个单元测试框 ...

  4. 关于char是否能表示一个中文

    char是可以表示中文的 这个问题点有3个考核点 1 char是多少位的 2 java用的是什么方式表示字符 3 Unicode是用多少位表示的 1的答案是16位的,2的答案是Unicode,3的答案 ...

  5. 对象的克隆(clone方法)

    1.深拷贝与浅拷贝 浅拷贝是指拷贝对象时仅仅拷贝对象本身(包括对象中的基本变量),而不拷贝对象包含的引用指向的对象.深拷贝不仅拷贝对象本身,而且拷贝对象包含的引用指向的所有对象. 2.深拷贝和浅拷贝的 ...

  6. win8.1下jdk的安装和环境变量的配置 eclipse的安装和汉化

    1.首先下载jdk安装包,安装的时候会有两个文件安装,一个是jdk一个是jre建议两个文件不要安装在一个目录下 2.安装jdk后面就是配置环境变量,path和classpath,path要在用户变量中 ...

  7. CSS-position 属性&元素脱离文档流引发父级边框塌陷问题

    CSS-position 属性 CSS 定位机制 CSS 有三种基本的定位机制:普通流.浮动(float)和绝对定位(position). 除非专门指定,否则所有框都在普通流中定位.也就是说,普通流中 ...

  8. Solon rpc 之 SocketD 协议 - RPC调用模式

    Solon rpc 之 SocketD 协议系列 Solon rpc 之 SocketD 协议 - 概述 Solon rpc 之 SocketD 协议 - 消息上报模式 Solon rpc 之 Soc ...

  9. Solon rpc 之 SocketD 协议 - 单链接双向RPC模式

    Solon rpc 之 SocketD 协议系列 Solon rpc 之 SocketD 协议 - 概述 Solon rpc 之 SocketD 协议 - 消息上报模式 Solon rpc 之 Soc ...

  10. 基于LDAP&&Role-based Authorization Strategy实现Jenkins团队权限管理

    在实际工作中,存在多个团队都需要Jenkins来实现持续交付,但是又希望不同团队之间进行隔离,每个项目有自己的view, 只能看到自己项目的jenkins job. 但是,jenkins默认的权限管理 ...