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

传播易网站开发方案水果网络营销策划方案

传播易网站开发方案,水果网络营销策划方案,wordpress 线报主题,怎么注册建设公司网站拦截器 上个章节我们完成了强制登录的功能, 后端程序根据Session来判断用户是否登录, 但是实现方法是比较麻烦的: 需要修改每个接口的处理逻辑需要修改每个接口的返回结果接口定义修改, 前端代码也需要跟着修改 有没有更简单的办法, 统一拦截所有的请求, 并进行Se…

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


拦截器


上个章节我们完成了强制登录的功能, 后端程序根据Session来判断用户是否登录, 但是实现方法是比较麻烦的:

  • 需要修改每个接口的处理逻辑
  • 需要修改每个接口的返回结果
  • 接口定义修改, 前端代码也需要跟着修改

有没有更简单的办法, 统一拦截所有的请求, 并进行Session校验呢, 这里我们学习一种新的解决办法: 拦截器


什么是拦截器?


拦截器Spring框架提供的核心功能之一,主要用来拦截用户的请求, 在指定方法(目标方法)前后, 根据业务需要执行预先设定的代码.

也就是说, 允许开发人员提前预定义一些逻辑, 在用户的请求响应前后执行. 也可以在用户请求前阻止其执行.

在拦截器当中,开发人员可以在应用程序中做一些通用性的操作;

比如通过拦截器来拦截前端发来的请求, 判断Session中是否有登录用户的信息. 如果有就可以放行, 如果没有就进行拦截.

image-20250414122136140


拦截器的基本使用


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

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

自定义拦截器


自定义拦截器:实现HandlerInterceptor接口,并重写其所有方法

image-20250415100512974


image-20250415100722889


image-20250415100811279


重写完上面三个方法,我们就已经定义好了拦截器,接下来,我们需要定义拦截器需要完成的工作:

image-20250415101243258


image-20250415101334563


image-20250415101556684

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

使用addInterceptors( )注册配置拦截器


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


实现WebMvcConfigurer接口:

image-20250415101811861


重写addInterceptors方法 :

image-20250415102041976


创建一个拦截器对象:

image-20250415102657803


创建一个拦截器对象还是太吃操作了,煮啵,有没有更简单好用的方法推荐一下呢?

有的兄弟,有的!我们已经学过了 SpringIoC 和 DI,也就是依赖管理与依赖注入,能否把创建拦截器对象这个操作,交由 Spring 进行,而不用我们自己手动创建呢?

image-20250415103247287

思考,比起手动创建对象,使用 Spring 帮我们管理对象,并且使用 DI 依赖注入,这样操作有什么优点呢?

【Spring DI】深入解析依赖注入 DI:搭配类注解通过 @Autowired 注解完成属性注入、构造方法注入、Setter 注入方法和三种注入方法的优缺点分析-CSDN博客


loginInterceptor 注册到 Spring MVC 的拦截器链中,并配置其拦截的请求路径规则

image-20250415112007297


拦截器使用细节


拦截器的入门程序完成之后,接下来我们来介绍拦截器的使用细节。拦截器的使用细节我们主要介绍两个部分:

  1. 拦截器的拦截路径配置
  2. 拦截器实现原理

拦截路径


拦截路径是指我们定义的这个拦截器, 对哪些请求生效.

我们在注册配置拦截器的时候, 通过addPathPatterns()方法指定要拦截哪些请求.

也可以通过excludePathPatterns()指定不拦截哪些请求.

上述代码中, 我们配置的是/**, 表示拦截所有的请求.


比如用户登录校验, 我们希望可以对除了登录之外所有的路径生效.

image-20250415112016679


启动服务,注意观察构造请求前后日志变化:

image-20250415112622569


使用 postman 访问任意请求:

image-20250415112406661


观察后端日志 ,此时的目标方法是 login 接口:

21ebd7f3f062b0909f7c1613cb3bb15e

可以看到, preHandle方法执行之后就放行了, 开始执行目标方法

目标方法执行完成之后执行postHandle和afterCompletion方法.


我们把拦截器中preHandle方法的返回值改为false:

image-20250415113034931


再观察运行结果

image-20250415113140437


可以看到, 拦截器拦截了请求, 没有进行响应.

我们对所有路径进行拦截,程序启动程序,使用 Postman 构造请求:

image-20250415112944067


我们看看日志中执行的 SQL

image-20250415113433097


常见拦截路径设置


在拦截器中除了可以设置/**拦截所有资源外,还有一些常见拦截路径设置:
image-20250414122914493

以上拦截规则可以拦截此项目中的使用URL,包括静态文件(图图片文件, JS 和 CSS 等文件).


拦截器执行流程


正常的调用顺序:

image-20250414123032241


有了拦截器之后,会在调用Controller之前进行相应的业务处理,执行的流程如下图

image-20250414123048431


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

排除拦截路径


image-20250415151247034

registry.addInterceptor(loginInterceptor).addPathPatterns("/**")                // 拦截所有路径.excludePathPatterns("/css/**", "/login"); // 排除静态资源和登录页registry.addInterceptor(loginInterceptor).addPathPatterns("/api/**")          // 拦截所有 /api/ 开头的请求.excludePathPatterns("/api/login");   // 排除 /api/login 路径

excludePathPatterns( )的源码解读及排除拦截页面的方法


完整的背景在这篇博客下面,这里单独提取排除拦截页面请求的方法

图书管理系统:基于拦截器完成登录校验功能


我们来看下面的注册配置拦截器 WebConfig 中 addInterceptors() 的逻辑:

image-20250415145137297


excludePathPatterns( )的源码解读


接下来,我们修改注册配置拦截器拦截的页面,排除拦截页面需要用到的方法是 excludePathPatterns()

对于excludePathPatterns(),可以传集合,也可以传字符串:

image-20250415145850700


分别表示的排除拦截页面的方法:

  • 硬编码排除
    • 链式调用多个 excludePathPatterns(),来排除多个页面请求;
    • 适合路径较少且固定的情况,代码直观。
  • 动态排除
    • 把要排除的页面设置成集合,使用一个excludePathPatterns() 排除集合中的所有页面请求;
    • 适合路径较多或可能动态变化的情况,便于维护和扩展。

方法一:硬编码排除


@Configuration
public class WebConfig implements WebMvcConfigurer {// 自定义的拦截器对象@Autowiredprivate LoginInterceptor loginInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {// 注册自定义拦截器对象registry.addInterceptor(loginInterceptor).addPathPatterns("/**")       // 设置拦截器拦截的请求路径(/**表示拦截所有请求).excludePathPatterns("/user/login")  // 设置拦截器排除拦截的路径.excludePathPatterns("/**/*.js")     // 排除前端静态资源.excludePathPatterns("/**/*.css").excludePathPatterns("/**/*.png").excludePathPatterns("/**/*.html");}
}

方法二:动态排除


@Configuration
public class WebConfig implements WebMvcConfigurer {// 自定义的拦截器对象@Autowiredprivate LoginInterceptor loginInterceptor;private List<String> excludePaths = Arrays.asList("/user/login","/**/*.js","/**/*.css","/**/*.png","/**/*.html");@Overridepublic void addInterceptors(InterceptorRegistry registry) {// 注册自定义拦截器对象registry.addInterceptor(loginInterceptor).addPathPatterns("/**")       // 设置拦截器拦截的请求路径(/**表示拦截所有请求).excludePathPatterns(excludePaths);  // 设置拦截器排除拦截的路径}
}

在这里插入图片描述

在这里插入图片描述

http://www.dtcms.com/wzjs/76668.html

相关文章:

  • 大连淘宝网站建设短视频平台推广方案
  • 哪个网站可以做魔方图片大全关键词查询工具哪个好
  • 淘宝客网站怎么做推广影视剪辑培训机构排名
  • 自己做的旅游网站 介绍网上销售都有哪些平台
  • wordpress多筛选徐州seo网站推广
  • 劲松做网站的公司seo外包公司多吗
  • 网站建设公司小程序基础建站如何提升和优化
  • 免费 网站 平台google官方下载
  • 台州外贸网站磁力链最好用的搜索引擎
  • 沈阳妇科排名前十的医院长沙官网seo技术厂家
  • 找人做网站维护多少钱优化器
  • 全栈网站开发工程师广东东莞最新疫情
  • 网站开发需求说明网络营销模式有哪些
  • 成都flash互动网站开发网络营销的市场背景
  • 做网站的材料今日关键词
  • 网站搭建为什么要备案网络推广网站排行榜
  • 官方网站下载官方版本网站模板库
  • 武汉网站优化方案网络推广员岗位职责
  • 企业网络营销策略分析案例长沙seo推广
  • 如何做网站ppt百度小说风云榜首页
  • 政府网站建设上会说明网站下载免费软件
  • 免备案域名是什么seo接单
  • 常用来做网站首页的是查网站权重
  • 贸易有限公司安卓优化大师手机版
  • 模版建站怎么建网站免费的
  • 苏州园区手机网站制作国内新闻大事20条
  • 东莞外贸建站模板推广游戏赚钱的平台
  • 桥西区附近网站建设价格成都网站优化排名推广
  • 购物网站建设的原理肇庆网站建设制作
  • 做医疗的网站自媒体代运营