【JavaEE进阶】图书管理系统 - 柒

目录

🍃前言

🍀什么是拦截器?

🌲拦截器的基本使用

🚩自定义拦截器

🚩注册配置拦截器

🚩拦截路径

🚩拦截器执行流程

🎄项目实现统一拦截

🚩定义拦截器

🚩注册配置拦截器


🍃前言

前面我们基本实现了图书股管理系统的功能,但是我们依旧存在一个问题。

就是我们不论是否登录,我们直接访问图书列表。也可以进行访问及修改

而我们希望达到的效果是,必须要进行登录后才能进行一系列操作

这里我们使用拦截器来完成着一系列操作

🍀什么是拦截器?

拦截器是Spring框架提供的核⼼功能之⼀,主要⽤来拦截⽤⼾的请求,在指定⽅法前后,根据业务需要执⾏预先设定的代码.

也就是说,允许开发⼈员提前预定义⼀些逻辑,在⽤⼾的请求响应前后执⾏.也可以在⽤⼾请求前阻⽌其执⾏.

在拦截器当中,开发⼈员可以在应⽤程序中做⼀些通⽤性的操作,⽐如通过拦截器来拦截前端发来的请求,判断Session中是否有登录⽤⼾的信息.如果有就可以放⾏,如果没有就进⾏拦截.

就⽐如我们去银⾏办理业务,在办理业务前后,就可以加⼀些拦截操作,办理业务之前,先取号,如果带⾝份证了就取号成功。业务办理结束,给业务办理⼈员的服务进⾏评价.这些就是"拦截器"做的⼯

🌲拦截器的基本使用

拦截器的使⽤步骤分为两步:

  1. 定义拦截器
  2. 注册配置拦截器

🚩自定义拦截器

⾃定义拦截器:实现HandlerInterceptor接⼝,并重写其所有⽅法

这里涉及到的三个方法

  • preHandle()⽅法:⽬标⽅法执⾏前执⾏. 返回true:继续执⾏后续操作;返回false:中断后续操作.
  • postHandle()⽅法:⽬标⽅法执⾏后执⾏
  • afterCompletion()⽅法:视图渲染完毕后执⾏,最后执⾏(后端开发现在⼏乎不涉及视图,暂不了解)

🚩注册配置拦截器

注册配置拦截器:实现WebMvcConfigurer接⼝,并重写addInterceptors⽅法

WebMvcConfigurer这个接口并不是只给拦截器使用的,而是WebMVC相关的配置都在这里

启动服务,试试访问任意请求,观察后端⽇志

可以看到preHandle⽅法执⾏之后就放⾏了,开始执⾏⽬标⽅法,⽬标⽅法执⾏完成之后执⾏ postHandle和afterCompletion⽅法.

我们把拦截器中preHandle⽅法的返回值改为false,再观察运⾏结果

运行结果:可以看到,拦截器拦截了请求,没有进⾏响应

🚩拦截路径

关于注册配置拦截器的拦截路劲,拦截路径是指我们定义的这个拦截器,对哪些请求⽣效.我们在注册配置拦截器的时候,通过 addPathPatterns() ⽅法指定要拦截哪些请求.也可以通过

excludePathPatterns() 指定不拦截哪些请求.上述代码中,我们配置的是 /** ,表⽰拦截所有的请求.

在拦截器中除了可以设置 /** 拦截所有资源外,还有⼀些常⻅拦截路径设置,比如在该项目中

🚩拦截器执行流程

学会了拦截器的基本使用,那么拦截器的执行流程是什么样的呢?

我们先来看一下正常的执行流程

当我们有了拦截器以后,我们的执行流程为

  1. 添加拦截器后,执⾏Controller的⽅法之前,请求会先被拦截器拦截住.执⾏ preHandle() ⽅法,这个⽅法需要返回⼀个布尔类型的值.如果返回true,就表⽰放⾏本次操作,继续访问controller中的⽅法.如果返回false,则不会放⾏(controller中的⽅法也不会执⾏).
  2. controller当中的⽅法执⾏完毕后,再回过来执⾏ postHandle() 这个⽅法以及afterCompletion() ⽅法,执⾏完毕之后,最终给浏览器响应数据.

🎄项目实现统一拦截

🚩定义拦截器

代码实现如下:

代码解释如下:

  1. 对服务中所存在的session进行判断,如果存在,则返回true,放行
  2. 若不存在,则使用setStatus()方法设置http状态码为401,前端收到响应进行跳转到登录页面

当前按照上述配置拦截器的代码来看,会拦截所有的路径,那么此时在没有登录的情况下,访问每个接口都会进行拦截,包括登录接口

所以我们需要把上述配置拦截器中的拦截路径重新配置一下

🚩注册配置拦截器

注意:拦截器也会拦截前端请求

代码:

访问用户登录接口:此时就可以访问了

相关推荐
虾条_花吹雪4 分钟前
Chat Model API
java
双力臂40410 分钟前
MyBatis动态SQL进阶:复杂查询与性能优化实战
java·sql·性能优化·mybatis
六毛的毛40 分钟前
Springboot开发常见注解一览
java·spring boot·后端
程序漫游人1 小时前
centos8.5安装jdk21详细安装教程
java·linux
超级码.里奥.农2 小时前
零基础 “入坑” Java--- 七、数组(二)
java·开发语言
hqxstudying2 小时前
Java创建型模式---单例模式
java·数据结构·设计模式·代码规范
挺菜的2 小时前
【算法刷题记录(简单题)002】字符串字符匹配(java代码实现)
java·开发语言·算法
A__tao2 小时前
一键将 SQL 转为 Java 实体类,全面支持 MySQL / PostgreSQL / Oracle!
java·sql·mysql
一只叫煤球的猫2 小时前
真实事故复盘:Redis分布式锁居然失效了?公司十年老程序员踩的坑
java·redis·后端
猴哥源码2 小时前
基于Java+SpringBoot的农事管理系统
java·spring boot