当前位置: 首页 > news >正文

拦截器interceptor总结

拦截器

  • 一. 概念
    • 拦截器和AOP的区别:
    • 拦截器和过滤器的区别:
  • 二. 入门案例
    • 2.1 定义拦截器bean
    • 2.2 定义配置类
    • 2.3 执行流程
    • 2.4 简化配置类到SpringMvcConfig中

一. 概念

引入
消息从浏览器发送到后端,请求会先到达Tocmat服务器;
将请求划分成动态、静态资源;处理动态;
动态的资源经过Filter过滤器;
过滤器放行后才是Spring,中央控制器会根据访问分发到controller中;
controller操作执行完后,返回数据给浏览器;

当如果想让每个controller被访问之前和后做一件事---- 拦截器

在这里插入图片描述
如:权限控制,需要看访问是否有权限访问这个controller;

定义:拦截器是一种动态拦截方法调用的机制,在SpringMVC中动态拦截controller方法的执行;

作用

  1. 在指定的方法调用前后执行预先设定的代码;
  2. 阻止原始方法的执行(如权限控制)

拦截器和AOP的区别:

AOP是原始方法确定会被调用,在调用前后做增强处理,拦截器是决定你能不能调用方法;

拦截器和过滤器的区别:

1.归属不同,Filter属于Servlet技术,Interceptor拦截器属于SpringMVC技术;
SpringMVC的功能可以在拦截器中操作,但不能在Filter中操作;
2.拦截范围不同:
Filter过滤器是在Tomcat服务器阶段配置,能对所有请求进行增强;
拦截器仅仅是对SpringMVC阶段操作,SpringMVC能接受哪些访问取决于容器启动配置中的设置:

二. 入门案例

2.1 定义拦截器bean

(1)在controller层新建一个拦截器层,创建一个自定义interceptor拦截器类,配置成bean;
在这里插入图片描述

(2)自定义拦截器类 实现 HandlerInterceptor,并重写preHandlepostHandleafterCompletion三个方法;

preHandle方法返回false会终止原始操作,原始操作后面的也不再执行;而true会都执行。可以用此增加判断逻辑,满足则true,不满足则false。
在这里插入图片描述

(3)让SpringMVC加载到拦截器;
保证SpringMVC能扫描到:
此时拦截器类就在controller目录下,不需要改;
在这里插入图片描述

2.2 定义配置类

(1)在config包下定义一个SpringMvcConfig配置类,类似addResourceHandlers分发者服务,继承WebMvcConfiguartionSupport实现 addIntercepter方法;
在这里插入图片描述

(2)将之前定义的拦截器ProjectInterceptor的bean注入,
再指定路径,如当调用“/books”请求时拦截;
在这里插入图片描述
(3)让SpringMVC能扫描到配置类:
在这里插入图片描述

效果
在这里插入图片描述
后台:
在这里插入图片描述

注意:
只有books 才会被拦截;而books/100 不会被拦截!
改: books, books/* 即可;

2.3 执行流程

在拦截器类中,preHandle方法返回false会终止原始方法及其之后的所有操作;而返回true会都执行。
在这里插入图片描述

2.4 简化配置类到SpringMvcConfig中

在这里插入图片描述

缺点:拦截器类和Spring绑定在一起了,侵入性较强;

http://www.lryc.cn/news/580.html

相关文章:

  • 轻松实现微信小程序上传多文件/图片到腾讯云对象存储COS(免费额度)
  • Golang中defer和return的执行顺序 + 相关测试题(面试常考)
  • 谁说菜鸟不会数据分析,不用Python,不用代码也轻松搞定
  • php mysql保健品购物商城系统
  • Vue3电商项目实战-首页模块6【22-首页主体-补充-vue动画、23-首页主体-面板骨架效果、4-首页主体-组件数据懒加载、25-首页主体-热门品牌】
  • linux 使用
  • 基于遗传算法的微电网调度(风、光、蓄电池、微型燃气轮机)(Matlab代码实现)
  • 方向导数与梯度下降
  • Java岗面试题--Java基础(日积月累,每日三题)
  • java基础—Volatile关键字详解
  • 内存检测工具Sanitizers
  • Triton : OpenAI 开发的用于Gpu开发语言
  • Python文件操作-代码案例
  • 活动目录(Active Directory)管理,AD自动化
  • Allegro如何使用Vertext命令修改丝印线段的形状操作指导
  • Leetcode力扣秋招刷题路-0030
  • 基于Prometheus和k8s搭建监控系统
  • 类和对象(下)
  • 达梦数据库单机部署
  • 从零到一学习Flutter——(二)状态和路由
  • TC358774XBG/TC358775XBG替代方案|CS5518替代TC358774XBG/TC358775XBG设计DSI转LVSD设计资料
  • Linux---Kernal与Shell讲解
  • Thiol-PEG-Acid,HS-PEG-COOH,巯基-聚乙二醇-羧基试剂供应
  • 数据结构与算法基础-学习-09-线性表之栈的理解、初始化顺序栈、判断顺序栈空、获取顺序栈长度的实现
  • 深入Kafka核心设计与实践原理读书笔记第二章
  • 知乎kol投放怎么做?知乎kol资源从哪里找?
  • python设计模式-享元设计模式,抽象工厂设计模式,面向对象设计模式
  • 10条终身受益的Salesforce职业发展建议!
  • 电子科技大学人工智能期末复习笔记(四):概率与贝叶斯网络
  • 码上掘金实现电子木鱼