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. react状态管理器之mobx

    react有几种状态管理器,今天先来整理一下mobx状态管理器,首先了解一下什么是mobx 1.mobx成员: observable action 可以干嘛: MobX 的理念是通过观察者模式对数据做 ...

  2. 自动化运维工具-Ansible之4-变量

    自动化运维工具-Ansible之4-变量 目录 自动化运维工具-Ansible之4-变量 变量概述 变量的定义和调用 变量优先级测试 变量优先级测试二 变量注册 facts缓存 变量概述 ​ 变量提供 ...

  3. 强化学习入门基础-马尔可夫决策过程(MDP)

    作者:YJLAugus 博客: https://www.cnblogs.com/yjlaugus 项目地址:https://github.com/YJLAugus/Reinforcement-Lear ...

  4. ASP.Net中的TreeView控件中对节点的上移和下移操作

    Web中的TreeView中的没有PreNode和NextNode属性. 但它的集合属性中有一个IndexOf属性,从而能够找到它的前一个节点知后一个节点. TreeView中要么只有一个根节点:要么 ...

  5. 风炫安全WEB安全学习第二十二节课 DOM型XSS讲解

    风炫安全WEB安全学习第二十二节课 DOM型XSS讲解 Dom型XSS演示 通过Javascript,可以重构整个HTML文档,你可以添加.移除.改变或重排页面上的项目 要改变页面的某个东西,Java ...

  6. Docker-ce Centos8 笔记二:常见问题

  7. python的默认参数的一个坑

    前言 pass 正文 在 https://docs.python.org/3/tutorial/controlflow.html#default-argument-values 中,有这样一段话 Im ...

  8. 利用GPU实现大规模动画角色的渲染(转)

    原文: https://www.cnblogs.com/murongxiaopifu/p/7250772.html 利用GPU实现大规模动画角色的渲染 0x00 前言 我想很多开发游戏的小伙伴都希望自 ...

  9. Flutter 基础组件:文本、字体样式

    // 文本.字体样式 import 'package:flutter/material.dart'; class TextFontStyle extends StatelessWidget { // ...

  10. bash shell数组使用总结

    本文为原创博文,转发请注明原创链接:https://www.cnblogs.com/dingbj/p/10090583.html  数组的概念就不多说了,大家都懂! shell数组分为索引数组和关联数 ...