拦截器失效和工具类中静态变量注入失败的问题

news2024/11/18 3:30:37

拦截器失效和工具类中静态变量注入失败的问题

文章目录

  • 拦截器失效和工具类中静态变量注入失败的问题
    • 1.拦截器配置冲突
    • 2.路径配置错误
    • 3.关于工具类中Maper注入失效的问题
      • 解决办法1:手动赋值给静态变量

问题描述:项目中需要设置多个拦截器拦截不同路径,但是有部分拦截器失效

搜索排查后成功解决问题。

有以下几种可能:

  1. 多个拦截器配置实现了WebMvcConfigurer或WebMvcConfigurerSupport,冲突了
  2. 路径配置错误
  3. 没有添加@Component等注解,或扫描失败(这个错误我没犯,就只给大家提示一下)

1.拦截器配置冲突

这个原因的话只需要将实现了WebMvcConfigurer的配置类整合在一起就可以。

我就犯了这个错,但是修改过后发现我的拦截器都还是没有生效

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Resource
    private WebInterceptor webInterceptor;
    @Resource
    private SuperInterceptor superInterceptor;
    @Resource
    private GeneralInterceptor generalInterceptor;
    @Resource
    private JuniorInterceptor juniorInterceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(superInterceptor).addPathPatterns("/api/super/**");
        registry.addInterceptor(webInterceptor)
                .addPathPatterns("/**")
                .excludePathPatterns(
                        "/web/logout",
                        "/web/login",
                        "/swagger-resources/",
                        "/v3/**",
                        "/v2/**",
                        "/swagger-resources/**",
                        "/webjars/**",
                        "/swagger-ui/**",
                        "/js/**",
                        "/swagger-ui.html/**",
                        "/doc.html",
                        "/error");
        //以下是未生效的拦截器
        registry.addInterceptor(superInterceptor).addPathPatterns("/api/super/**");
        registry.addInterceptor(generalInterceptor).addPathPatterns("/api/general/**");
        registry.addInterceptor(juniorInterceptor).addPathPatterns("/api/junior/**");

2.路径配置错误

这个错我也犯了,一开始打死也没想到会是这个错… …

原因:项目中配置了上下文路径,我在设置拦截器的时候将上下文路径也一起写进拦截路径里了

在这里插入图片描述

修改后,拦截器终于生效

//修改前
registry.addInterceptor(superInterceptor).addPathPatterns("/api/super/**");
registry.addInterceptor(generalInterceptor).addPathPatterns("/api/general/**");
registry.addInterceptor(juniorInterceptor).addPathPatterns("/api/junior/**");

//修改后
registry.addInterceptor(superInterceptor).addPathPatterns("/super/**");
registry.addInterceptor(generalInterceptor).addPathPatterns("/general/**");
registry.addInterceptor(juniorInterceptor).addPathPatterns("/junior/**");

关于拦截器的路径配置,有一点需要注意一下(否则就会和我犯一样的错):

拦截路径配置的是相对于应用程序的上下文路径的路径模式。如果你配置的拦截路径是"/super",而应用程序的上下文路径是"/api",那么实际拦截的路径将是"/api/super"。

小tips:可是使用//System.out.println(request.getServletPath());来打印出当前的路径,对比一下和你拦截器中要拦截的是否一样。

3.关于工具类中Maper注入失效的问题

解决了以上问题后,测试后发现拦截器虽然全部生效,但是又出现了新的空指针异常。

在这里插入图片描述

查阅资料发现:Spring的依赖注入是依赖set方法,不支持直接将值注入到静态变量中

解决办法1:手动赋值给静态变量

我就是采用的这个办法

原理:

  1. 先正常注入一个私有的Mapper,然后再声明一个静态的Mapper变量。
  2. 使用创建init()方法,再方法上添加@PostConstruct注解。@PostConstruct注解的方法会在Spring依赖注入后,对象使用前自动的执行,可以用来执行一些初始化的方法。
  3. 在init方法内将正常注入的Mapper赋值给声明后未赋值的Mapper
//正常注入
@Resource
private AdminMapper adminMapperN;

//声明静态Mapper在工具类中使用
public static AdminMapper adminMapper;

//实现init方法
@PostConstruct
public void init(){
    adminMapper = adminMapperN;
}

至此,我的问题全部解决!

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

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

相关文章

【Java实战项目】【超详细过程】—大饼的图片服务器3(ImageDao类详解)

ImageDao详解 一、向数据库中写入图片属性1.与数据库建立连接2.创建并拼接SQL语句3.执行SQL语句4.定义异常类JavaImageServerException5.关闭数据库连接6.写入图片的完整代码 二、查找数据库中所有图片属性1.与数据库建立连接2.创建并拼接SQL语句3.执行SQL语句4.处理结果集5.关…

python+django吉他乐谱推荐交流网站的实现vue

而吉他乐谱推荐交流网站能很好地解决这一问题,轻松应对乐谱推荐,既能提高用户对乐谱评论,又能加快乐谱推荐交流网站的效率,取代人工管理是必然趋势。 本吉他乐谱推荐交流网站以Django作为框架,B/S模式以及MySql作为后台…

Vue错误记录

文章目录 1. 项目build的时候报错Warning: Accessing non-existent property cat of module exports inside circular dependency2. WebpackOptionsValidationError: Invalid configuration object. Webpack has been initialised using a configuration object that does not …

嵌入式linux(imx6ull)下RS485接口配置

接口原理图如下: 由原理图可知收发需要收UART_CTS引脚控制,高电平时接收,低电平时发送。通过查看Documentation/devicetree/bindings/serial/fsl-imx-uart.yaml和Documentation/devicetree/bindings/serial/rs485.yaml两个说明文档,修改设备树…

Visual Stadio使用技巧

C语言调试技巧 Debug 和 Release 的介绍 Debug:通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试(可调试)。 Release:通常称为发布版本,它往往时进行了各种优化&a…

照片能做真人三维建模?

易模App开启真人手办定制以来,许多用户朋友在积极尝试,更有用户反馈了一种可以使模型成果更精致的建模方式——螺旋连拍。 螺旋连拍使用易模App人像模式自定义方法,上传拍好的真人照片即可AI建模,操作方法简单。那么如何拍摄用于建…

9月5日上课内容 第一章 NoSQL之Redis配置与优化

本章结构 关系型数据库和非关系型数据库 概念介绍 ●关系型数据库: 关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。 SQL 语句(标准数据查询语言)就是…

【TSN】(一)中英译文

【Two Stream Net】 一,双语翻译 文章目录 【Two Stream Net】Abstract1 Introduction1.1 Related work 2 Two-stream architecture for video recognition3 Optical flow ConvNets3.1 ConvNet input configurations3.2 Relation of the temporal ConvNet archite…

数据可视化、BI和数字孪生软件:用途和特点对比

在现代企业和科技领域,数据起着至关重要的作用。为了更好地管理和理解数据,不同类型的软件工具应运而生,其中包括数据可视化软件、BI(Business Intelligence)软件和数字孪生软件。虽然它们都涉及数据,但在功…

制药企业设备管理常见问题和措施

制药企业的设备管理是确保生产质量和合规性的关键环节。然而,许多制药企业在设备管理方面面临各种常见问题。本文将探讨这些问题,并提供相应的措施,包括PreMaint设备健康管理平台的应用,以帮助企业改进其设备管理实践。 问题1&…

Si3262 一款低功耗刷卡+触摸+mcu 三合一SOC芯片

Si3262是-款高度集成的低功耗soC芯片,其集成了基于RISC-V 核的低功耗MCU和工作在13.56MHz的非接触式读写器模块。 该芯片ACD模式下刷卡距离可达4-5cm(天线决定),适用于智能门锁,电子锁,柜锁,桑拿…

伪微分反馈控制(Pesudo-Drivative Feedback Control——PDF)

运动控制-单轴伺服控制带宽分析(二) - 知乎 (zhihu.com) 伪微分反馈控制_百度百科 (baidu.com) 伺服电机控制器的参数整定_老马过河hhh的博客-CSDN博客 伪微分PIIP控制_yukee10的博客-CSDN博客

【前端】React项目初体验

React介绍 React 是一个非常流行的 JavaScript 前端框架,它为开发人员提供了一种快速构建高质量用户界面的方式。以下是使用 React 构建项目的初体验: 安装 React 和相关依赖项 使用 React 开发项目需要先安装一些必需的依赖项,包括 Node.…

人大与加拿大女王大学金融硕士——与其羡慕他人,不如充实自己

很喜欢的一段话:“优秀的生活状态,不是仰望别人,而是把自己活成一道风景。只要自己变优秀了。其他的事情都会跟着好起来。无论何时何地,与其羡慕他人,不如花时间充实自己。”人大女王金融硕士,助你充实自己&#xff0c…

grid弹性布局 设置宽高一致

效果图如下: 例子:设置每行四列的弹性布局,每个盒子宽高相同,间距为10px .left_list{display: grid;grid-gap: 10px 10px;grid-template-columns: repeat(4,1fr);.list_item{height: 0;padding-bottom:100%;/*高度设置为0&#…

Docker部署EMQX

1、简介 EMQ X (Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器。 Erlang/OTP是出色的软实时 (Soft-Realtime)、低延时 (Low-Latency)、分布式 (Distributed)的语言平台。 MQTT 是轻量的 (Lightweight)、发布订阅模式 (Pu…

远程访问服务器JupyterLab的配置方法

远程访问服务器JupyterLab的配置方法 环境及工具注意 基本步骤生成密码生成并修改配置文件后台运行jupyter后台关闭 其实就是在服务器运行JupyterLab,然后在本地浏览器访问 环境及工具 服务器:Ubuntu 16.04 本机: windows 11 个人使用终端神…

Spring中Endpoint、HasFeatures、NamedFeature和Actuator的关系及实现原理

文章目录 1. 关系缘由2. Actuator简介及简单使用3. Endpoint和Actuator的关系4. Endpoint和HasFeatures的关系5. Endpoint和HasFeatures原理解析5.1 Endpoint的实现原理5.2 HasFeatures的实现原理 6. 个人闲谈 1. 关系缘由 我们经常可以在Springboot中看到Endpoint注解&#x…

Vue2进阶篇学习笔记

文章目录 Vue2进阶学习笔记前言1、Vue脚手架学习1.1 Vue脚手架概述1.2 Vue脚手架安装1.3 常用属性1.4 插件 2、组件基本概述3、非单文件组件3.1 非单文件组件的基本使用3.2 组件的嵌套 4、单文件组件4.1 快速体验4.2 Todo案例 5、浏览器本地存储6、组件的自定义事件6.1 使用自定…

伦敦银线性回归分析

在金融市场中,商品的价格一段时间内总是会围绕着一条线性回归趋势线,在两侧波动并沿着这条趋势线方向发展。当价格在波动过程中偏离趋势线距离太大了,就会再次向趋势线靠拢。 波浪理论认为商品的价格走势都是波浪式发展的,无论处于…