Spring MVC 拦截器编程开以及常见问题

写在前面:最近在对一个微服务增减接口拦截器的时候,定义的拦截器未能生效,并且未报任何异常,swagger的ui也无法正常访问。经查明原因:prehandler方法最后返回的布尔值是false,拦截器定义部分是从其他服务拷贝的文件,由于没有检查,导致未能生效。

  1. 配置拦截器

我这里配置拦截器没有使用 xml,使用的是java的方式配置的interceptor,这样比较直观,更容易理解。

InterceptorConfig这个类继承WebMvcConfigurerAdapter 抽象类,WebMvcConfigurerAdapter 抽象类 实现了 WebMvcConfigurer 接口。WebMvcConfigurer 该接口可以对拦截器的很多属性进行配置。

package com.example.swaggertest.demos.web.Config;import com.example.swaggertest.demos.web.Interceptor.CollrollerInterceptorHandler;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;@Configuration
public class InterceptorConfig extends WebMvcConfigurerAdapter {@Overridepublic void addInterceptors(InterceptorRegistry registry) {//覆写拦截器过滤条件registry.addInterceptor(new CollrollerInterceptorHandler()).addPathPatterns("/**");  //对所有的接口进行过滤}}
  1. 定义拦截器

CollrollerInterceptorHandler 实现了HandlerInterceptor 接口,这个接口里定义了三个方法,如代码所示。

package com.example.swaggertest.demos.web.Interceptor;import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class CollrollerInterceptorHandler implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//编写拦截业务return true; //注意一定要返回true,否则容易出现与swagger集成问题,导致不能访问swagger的ui}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {HandlerInterceptor.super.afterCompletion(request, response, handler, ex);}
}
  1. 拦截器与过滤器的区别

拦截器与过滤器的区别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/11803.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

商城小程序系统与C#.net商城小程序系统源码_OctShop

在移动互联网与电商的时代,商城小程序系统已经成为了众多企业和商家开展电商业务的重要工具。OctShop将以商城小程序系统、C#商城小程序系统源码和.net 商城小程序系统为主题,探讨这些系统的特点和优势。 一、商城小程序系统是什么 商城小程序系统是一种…

Python实战开发及案例分析(20)—— 宽度优先

宽度优先搜索(Breadth-First Search, BFS)是一种遍历图或树的算法。它从根节点开始,探索所有邻近节点,然后再按顺序访问每个邻近节点的邻居,直到所有节点都被访问为止。在图中,为了避免访问同一个节点多次&…

建筑乙级资质延期中的政策变化与应对策略

在建筑乙级资质延期过程中,政策的变化可能会对企业的运营和策略产生重大影响。为了应对这些变化,企业需要密切关注政策动态,灵活调整自身的经营策略。以下是一些可能的政策变化及相应的应对策略: 一、政策变化 资质延期条件调整&a…

福派斯鲜肉狗粮大揭秘,狗狗吃了都说好!

狗粮哪个牌子好?我强烈推荐福派斯鲜肉狗粮!在众多狗粮品牌中,福派斯以其高品质、营养均衡以及独特的产品特点,受到了广大宠物主人的一致好评。 (1) 福派斯鲜肉狗粮的配方表透露出其对于原料选择的严谨和用心。高达75%的鲜肉含量&a…

安卓手机APP开发__支持不同的像素深度

安卓手机APP开发__支持不同的像素深度 目录 概述 使用对深度独立的像素 把DP单位转换成像素单位 概述 安卓设备不仅有不同的大小,还有不同的像素深度.一个设备可能在每一英寸上有 160个像素,另一个设备在相同的尺度上有480个像素.如果你不考虑这些不同, 系统可能会缩放你的…

linux不小心将/etc/passwd用户文件清空或删除解决方法

大概思路:进入单用户模式将passwd-引子程序复制为删除的passwd用户文件,关闭selinux 此系统为:centos 7 1.在GRUB引导的时候按e进入编辑模式,linux16那一行的ro 修改为rw rd.break ‘ ’ 2.ctrlx执行 3.进入单用户模式后修改根…

springboot学习整理

视频:基础篇-01_springboot概述_哔哩哔哩_bilibili 介绍 spring boot 是spring提供的一个子项目,用于快速构建spring应用程序 spring构建: 1 导入依赖繁琐 ; 2 项目配置繁琐 spring Framework: 核心 spring Boot :快速构建spring…

AI学习指南概率论篇-信息论

AI学习指南概率论篇-信息论 信息论是信息科学中的一个重要分支,主要研究信息的量、质和流通规律等问题。在人工智能领域中,信息论被广泛应用于数据压缩、数据传输和模型优化等方面。本文将从信息论的概述、AI中的使用场景、定义和意义以及相关公式讲解这…

win11右键菜单恢复win10风格

有很多朋友升级到win11系统之后不是特别喜欢右键菜单,因为经常需要多点击一次显示更多选项,很不舒服。大家就想知道如何修改回原来win10的右键菜单,今天给大家介绍Win11右键菜单怎么修改为以前的样子,仅需执行2条明路,…

秒杀系统之设计方向

1 秒杀存在的问题 对于一个日常平稳的业务系统,如果直接开通秒杀功能的话,往往会出现很多问题—— 2 设计方向的思考 秒杀本质是要求一个瞬时高发下的承压系统,这也是其区别于其他业务的核心场景。对日常系统秒杀产生的问题逐一进行拆解分…

PostgreSQL自带的命令行工具24- postgres

PostgreSQL自带的命令行工具24- postgres postgres 命令主要是 PostgreSQL 数据库服务器的主要执行文件。当你启动 PostgreSQL 服务时,实际上就是在后台运行 postgres 程序。这个程序负责处理用户请求、执行 SQL 命令、管理数据库文件等核心数据库管理任务。通常&a…

深入理解tengine的sysguard模块

目录 1. 引言2. 开启sysguard模块2.1 编译2.2 配置3. 源码分析3.1 配置参数分析3.2 模块的初始化3.3 ngx_http_sysguard_handler函数3.4 各项负载指标的获取3.4.1 load系统负载的获取3.4.2 cpu使用率的获取3.4.3 内存使用情况的获取3.3.5 请求平均响应时间的获取1. 引言 Tengin…

深入浅出:ConcurrentLinkedQueue源码分析与实战

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

windows驱动开发-inf文件(三)

持续讲解剩下inf节,剩下的几乎都是INF DDInstall 相关的部分,这部分其实非常多,不过我们只讲解最主要的部分,在inf文件说明的最后一篇文档中我们会说明原因。 INF-DefaultInstall 如果要生成 通用驱动程序包,则仅当具…

CentOS使用Docker搭建Nacos结合内网穿透实现无公网IP远程登录本地管理平台

文章目录 1. Docker 运行Nacos2. 本地访问Nacos3. Linux安装Cpolar4. 配置Nacos UI界面公网地址5. 远程访问 Nacos UI界面6. 固定Nacos UI界面公网地址7. 固定地址访问Nacos Nacos是阿里开放的一款中间件,也是一款服务注册中心,它主要提供三种功能:持久化…

网站服务器备案及域名购买配置教程

一、阿里云服务备案准备工作 1.什么是备案? 备案是指向相关部门提交网站信息,以便监管和管理互联网信息服务,未经备案的网站可能面临罚款甚至被关闭的风险。备案主要看您的网站或App等互联网信息服务解析到的服务器是否在中国内地(大陆),如果服务器在中国内地(大陆),…

探索Python中的文件操作:如何列出一个目录下的所有文件?

在Python中,处理文件和目录是一项常见的任务。无论是在数据科学项目中读取数据集,还是在Web开发中管理用户上传的文件,我们都需要知道如何列出一个目录下的所有文件。本文将通过通俗易懂的语言,为初学者详细讲解如何在Python中实现…

Tkinter组件:Text-显示和处理多行文本

Tkinter组件:Text Text(文本)组件用于显示和处理多行文本。在 Tkinter 的所有组件中,Text 组件显得异常强大和灵活,适用于多种任务。虽然该组件的主要目的是显示多行文本,但它常常也被用于作为简单的文本编…

kali更新镜像源

1. 什么是镜像源 镜像源一种数据存储和分发技术,通常指的是一个服务器或网站,它存储了另一个服务器或网站上的某些或全部内容的副本。 2. kali更新镜像源 1. 编辑镜像源文件 vi /etc/apt/sources.list 2. 将原来的镜像源用#号注释掉 3. 选择镜像源地址…

LLM应用-文档解析 AI大模型总结分析文档

1)https://notegpt.io/pdf-summary 支持总结,思维导图、对话 2)chatdoc https://chatdoc.com/ 3)chatpdf https://www.chatpdf.com/ https://www.chatpdfs.cn/ 4)kimi https://kimi.moonshot.cn/