WebMvcConfigurer配置不当导致鉴权失败

最近同事说他们有个新需求,需要对接口进行加解密,所以他给项目配置了一个拦截器,但这个拦截器直接导致了每个接口鉴权失败,每次调用接口都是提示没有session信息。
公司内的所有java项目是公用同一套基础依赖,所以我也为自己的项目配置了一个拦截器,我在启动项目后我请求了项目中的一个接口,session鉴权通过,没有出现他那种情况。

归属代码
本人
同事

对比了下两人的代码,发现基本逻辑是一样,我的代码没有 @EnableWebMvc这个注解,我一般都不加Enable注解,springboot中一般不需要Enable开头的注解,我推测应该是这个注解有问题。查看 @EnableWebMvc注解导入了一个配置类DelegatingWebMvcConfiguration

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import(DelegatingWebMvcConfiguration.class)
public @interface EnableWebMvc {
}

DelegatingWebMvcConfiguration中有setConfigurers方法,这个方法是用了自动注入所有的WebMvcConfigurer
在这里插入图片描述
DelegatingWebMvcConfiguration有一个子类EnableWebMvcConfiguration,而EnableWebMvcConfiguration是自动配置类WebMvcAutoConfiguration的一个静态内部类。
在这里插入图片描述
WebMvcAutoConfiguration 自动配置类为我们配置了spring mvc方面的过滤器、编解码器、视图解析器等。
在这里插入图片描述
WebMvcAutoConfiguration类上有一行注解代码@ConditionalOnMissingBean(WebMvcConfigurationSupport.class) ,它表示只有当spring容器中不存在WebMvcConfigurationSupport类型bean时,此自动配置类才生效。
而我们只要在项目代码中使用EnableWebMvcConfiguration注解,就会向容器中注册一个EnableWebMvcConfiguration注解所导入的DelegatingWebMvcConfiguration类型的Bean,而DelegatingWebMvcConfigurationWebMvcConfigurationSupport的子类。也就是说只要使用了EnableWebMvcConfiguration注解,容器中就会被注册一个WebMvcConfigurationSupport类型的Bean,而WebMvcConfigurationSupport 类型bean存在时,配置类WebMvcAutoConfiguration是不生效的。这样导致springmvc的自动配置全部失效,与此相关的所有配置都需要自己手动配置,而我们项目中的公用基础依赖的鉴权是又要依赖spring mvc的自动配置,那么此时线程上下文中便无法注入session信息,最终导致接口调用时鉴权失败。
所以解决方案是删掉@EnableWebMvc注解,删除掉后一切恢复正常。
建议:在spring boot环境下,非必要情况下不要加类似@EnableXXX的注解,除非你明确知道它是无副作用的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

差分个人见解(二)

差分个人见解(二) 二维差分二维差分数组的用途构造二维差分数组实战演练 如果你还不太熟悉一维差分,那么请先学会一维差分。 二维差分 二维差分数组的用途 在一维差分数组中,它的用途是 快速 使一个区间内加上一个数。 那么二…

【产品经理】订单处理2

本次讲解订单初始化成功到ERP系统过程中的后续环节。 一、根据客服备注更新订单信息 初始化订单过程中,若订单中的客服备注信息对订单进行更新,包括可能改收货信息、改商品、加赠品、指定快递等。 注意:更新订单的过程中要注意订单当前状…

漫步者M125便携式蓝牙音箱首发价169

目录 一、音箱音质方面 二、音箱续航方面 三、音箱外观设计 四、音箱连接方面 五、音效方面 六、总结 在这个快节奏的时代,音乐成为了许多人生活中不可或缺的调味剂,一款优质的便携蓝牙音箱,无疑是旅行、户外或居家休闲的理想伴侣。近日…

基于 Redis 实现分布式缓存

一、单节点 Redis 的问题 1.1 存在的问题 1、数据丢失问题:Redis 是内存存储,服务重启可能会丢失数据。 2、并发能力问题:单节点 Redis 并发能力虽然不错,但也无法满足如 618 这样的高并发场景。 3、故障恢复问题:如果…

【机器学习】机器学习赋能医疗健康:从诊断到治疗的智能化革命

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀目录 📒1. 引言📙2. 机器学习在疾病诊断中的应用🧩医学影像分析:从X光到3D成像带代码&#x1…

【B站大神推荐】OBS Studio史上最好用的免费视频录制直播神器,绝无仅有!

🚀 个人主页 极客小俊 ✍🏻 作者简介:程序猿、设计师、技术分享 🐋 希望大家多多支持, 我们一起学习和进步! 🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注 前言 你是不是…

一套轻量、安全的问卷系统基座,提供面向个人和企业的一站式产品级解决方案

大家好,今天给大家分享的是一款轻量、安全的问卷系统基座。 XIAOJUSURVEY是一套轻量、安全的问卷系统基座,提供面向个人和企业的一站式产品级解决方案,快速满足各类线上调研场景。 内部系统已沉淀 40种题型,累积精选模板 100&a…

2024年【公路水运工程施工企业安全生产管理人员】报名考试及公路水运工程施工企业安全生产管理人员考试试卷

题库来源:安全生产模拟考试一点通公众号小程序 2024年公路水运工程施工企业安全生产管理人员报名考试为正在备考公路水运工程施工企业安全生产管理人员操作证的学员准备的理论考试专题,每个月更新的公路水运工程施工企业安全生产管理人员考试试卷祝您顺…

Kettle 数据抽取工具使用教程:从入门到实战

一、简介 Kettle 是 Pentaho Data Integration (PDI) 的一个组成部分,是一个开源的数据集成工具。它被广泛用于数据的抽取、转换和加载 (ETL) 过程。Kettle 提供了一个易于使用的图形界面,可以轻松设计和执行 ETL 流程。 github 源码地址:ht…

LLM 大模型学习:量化技术、QLoRA、量化库

模型的推理过程是一个复杂函数的计算过程,这个计算一般以矩阵乘法为主,也就是涉及到了并行计算。一般来说,单核CPU可以进行的计算种类更多,速度更快,但一般都是单条计算;而显卡能进行的都是基础的并行计算&…

javaweb和Mysql学习

javaweb学习 HTML 结构标签 HTML的结构标签分为 <html>&#xff1a;定义HTML文档的根元素。<head>&#xff1a;包含了文档的元&#xff08;meta&#xff09;、标题&#xff08;title&#xff09;、样式表&#xff08;style&#xff09;和脚本&#xff08;scrip…

nginx 启动报错:Failed to start The nginx HTTP and reverse proxy server.

1&#xff0c;启动 nginx报错 systemctl start nginx[rootlaoban yum.repos.d]# systemctl start nginx Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "jetails. [rootlaoban…

俄罗斯Yandex推广投放如何开户?Yandex广告开户和代运营推广流程详解_俄罗斯_受众_搜索引擎

在俄罗斯进行Yandex广告推广是一种有效的在线营销方式&#xff0c;特别是针对俄罗斯市场。Yandex是俄罗斯最受欢迎的搜索引擎&#xff0c;类似于Google在全球范围内的地位。以下是通过Yandex广告推广的一般步骤&#xff0c;以及如何通过上海上弦进行广告开户和代运营。 1. Yan…

STL-常用容器

3.1.1. string基本概念 本质&#xff1a; string是C风格的字符串&#xff0c;char*是C语言风格的字符串string本质上是一个类 string和char*的区别&#xff1a; char*是一个指针string是一个类&#xff0c;类内部封装并负责管理char*&#xff0c;是一个char*型的容器 特点&a…

django-vue-admin 本地部署

一、项目地址 主分支&#xff1a;master&#xff08;稳定版本&#xff09; 开发分支&#xff1a;develop django-vue3-admin-masterhttps://gitee.com/huge-dream/django-vue3-admin 注意&#xff1a;下载master分支zip代码包&#xff0c;解压后删掉web\src\views\syst…

数据结构笔记补充问题

1、假设线性表L采用单链表存储结构&#xff0c;设计一个算法&#xff0c;在L的数据元素最大值之前插入&#xff08;假设L的各个数据元素值不同&#xff09;数据元素x。 基本思想&#xff0c;先查找到最大元素对应的结点&#xff0c;再在之前插入x对应的结点&#xff1b; 设计算…

Android开发AndroidStudio安装教程

本文图示展示AndroidStudio安装教程。 目录 一、下载安装包 二、安装 一、下载安装包 https://developer.android.google.cn/studio?hlzh-cn 二、安装 双击exe Next Next Next 默认点击Install Next 点击finish进入设置文件界面。 如果本地有设置文件&#xff0c;选择C…

Zabbix 7.0 新增功能亮点(二)——history.push API方法

Zabbix7.0LTS一经发布便吸引了众多运维小伙伴的关注&#xff0c;乐维社区forum.lwops.cn也伴随着不少小伙伴的热议与探讨&#xff0c;话不多说&#xff0c;抓紧上车。 前面我们介绍了zabbix 7.0 新增功能亮点&#xff08;一&#xff09;——T参数&#xff0c;本篇将向大家介绍z…

【掌握C++模板进阶】:高级编程的艺术

&#x1f4c3;博客主页&#xff1a; 小镇敲码人 &#x1f49a;代码仓库&#xff0c;欢迎访问 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f30f; 任尔江湖满血骨&#xff0c;我自踏雪寻梅香。 万千浮云遮碧…

【FreeRTOS】创建任务-声光色影

参考《FreeRTOS入门与工程实践(基于DshanMCU-103).pdf》 目录 1 基本概念2 任务创建与删除2.1 什么是任务2.2 创建分配内存2.2.1 动态任务2.2.1 静态分配内存 2.3 示例1: 创建任务2.3.1 声2.3.1.1 music.c2.3.1.2 music.h2.3.1.4 硬件接线 2.3.2 光2.3.3 色2.3.4 影 在本章中&a…