使用HandlerInterceptor 中注入其他service时为null分析及解决

news2024/11/15 8:47:49

一情况分析

1.1 拦截器代码

public class ServerInterceptor implements HandlerInterceptor {
    private static final Logger _logger = LoggerFactory.getLogger(ServerInterceptor.class);
    PrintWriter out;
    JSONObject res = new JSONObject();
    
    @Autowired
    UserInfoLoginService userInfoLoginService;
    @Autowired
    SysUserService sysUserService;
    
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/json; charset=utf-8");
        _logger.info("ServerInterceptor逻辑处理");
        String header = request.getHeader("Server");
        if (!"Server".equals(header)) {
            _logger.info("ServerInterceptor无权限");
            res.put("code", "Server");
            res.put("msg", "ServerInterceptor无权限");
            res.put("data", null);
            out = response.getWriter();
            out.append(res.toString());
            return false;
        }
        return true;
    }

1.2 拦截器配置

在这里插入图片描述

1.3 原因

造成 UserInfoLoginService,SysUserService 为null的原因:
拦截器加载是在springcontext创建之前完成的,在拦截器配置进行加载,进行new ServerInterceptor()时,这里只是创建的ServerInterceptor空对象,并没有将内部属性进行注入;容器启动结束在使用拦截器时注入实体自然就为null。

二解决方案

在拦截器配置中将拦截器提前暴露,交给spring容器管理

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    @Resource
    InterceptorProperties interceptorProperties;

    @Resource
    ServerInterceptor serverInterceptor;


    @Override
    public void addInterceptors(InterceptorRegistry registry) {


        //注册ServerInterceptor
        InterceptorRegistration serverRegistration = registry.addInterceptor(serverInterceptor);

        if (!CollectionUtils.isEmpty(interceptorProperties.getIncludeFilterServerPaths())) {
            // Server拦截路径
           serverRegistration.addPathPatterns(interceptorProperties.getIncludeFilterServerPaths());
        }
       


    }
}

2、拦截器添加@Component,交给容器管理

@Component
public class ServerInterceptor implements HandlerInterceptor {
    private static final Logger _logger = LoggerFactory.getLogger(ServerInterceptor.class);
    PrintWriter out;
    JSONObject res = new JSONObject();

    @Autowired
    UserInfoLoginService userInfoLoginService;

    @Autowired
    SysUserService sysUserService;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/json; charset=utf-8");
        _logger.info("ServerInterceptor逻辑处理");
        String header = request.getHeader("Server");
        if (!"Server".equals(header)) {
            _logger.info("ServerInterceptor无权限");
            res.put("code", "Server");
            res.put("msg", "ServerInterceptor无权限");
            res.put("data", null);
            out = response.getWriter();
            out.append(res.toString());
            return false;
        }
        return true;
    }

}

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

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

相关文章

我也惊呆了!原来软件开发根本不需要会编码

一、前言 众所周知,完成一个大型的企业级系统,公司往往需要大量的人力做支持后盾,例如需要需求分析师、数据库管理员、前台美工、后台程序员、测试人员等。在快速发展中的企业,尤其是中小企业,都是一个萝卜多个坑&…

【软件推荐】屏蔽手机开屏广告

有时博客内容会有变动,首发博客是最新的,其他博客地址可能未同步,请认准https://blog.zysicyj.top 首发博客地址 软件介绍 李跳跳APP是一款强大的手机软件弹窗广告跳过软件。通常我们使用的广告拦截软件是通过直接代理网络来过滤广告&#xf…

AI改写-AI改写可以迅速生成新的文章有什么弊端吗?

大家好,今天我们要聊一聊一个近年来备受热议的话题:147SEO改写。现在人工智能技术已经发展到了可以帮助我们改写文章的程度。这听起来似乎很神奇,但也引发了一些深思。我们将在本文中讨论这个话题,看看AI改写究竟是一种利好还是一…

SAP CRM 模块:概述,体系结构

前言 CRM 代表“客户关系管理”,是一组有助于以有组织的方式管理客户关系的方法和工具。 在当今竞争激烈的商业环境中,顶级公司的注意力越来越集中于其最有价值的资产– 客户。 因此,这些公司需要一种合适的软件解决方案来迎合其客户&#…

华为云云耀云服务器L实例评测|云耀云服务器购买流程与功能介绍

目录 概述什么是云耀云服务器L实例功能概述 技术参数处理器和内存存储和网络GPU加速 强大的计算能力高性能计算集群大规模并行计算 灵活可扩展的存储本地SSD存储产品购买流程 概述 什么是云耀云服务器L实例 云耀云服务器L实例是新一代开箱即用、面向中小企业和开发者打造的全新…

NFT Insider#107:The Sandbox和Unstoppable Domains合作,YGG“超级任务”冠军诞生

引言:NFT Insider由NFT收藏组织WHALE Members、BeepCrypto联合出品,浓缩每周NFT新闻,为大家带来关于NFT最全面、最新鲜、最有价值的讯息。每期周报将从NFT市场数据,艺术新闻类,游戏新闻类,虚拟世界类&#…

xxl-job-代码创建任务执行本地命令+解决报错

问题描述 因为环境受限,所以我的mysql和xxl-job-admin是放在docker里的,执行器是放在本地的,要执行的命令也需要本地环境。 本文将记录相关配置、实现过程和遇到的问题及解决方案。 配置 xxl-job-admin配置 xxl-job-admin放在docker容器…

虚拟机批量备份时缩短备份窗口的方法之一:串/并行快照

一条备份任务中是可以同时备份多个虚拟机的,虚拟机在备份的时候,需要对其进行打快照来保证数据的一致性。 对虚拟机进行打快照,需要消耗一定的时间,当虚拟机开启时,虚拟机的内存状态也会被快照下来,因此快…

无涯教程-JavaScript - INDIRECT函数

描述 INDIRECT函数返回由文本字符串指定的引用。 如果您在Excel公式中键入引用B1,则Excel会理解这引用了单元格B1。但是,Excel无法将文本字符串" B1"理解为引用。因此,如果单元格引用采用文本字符串的形式,则需要使用INDIRECT函数将其转换为实际的单元格引用。 立…

SpringMvc---编码过滤器(解决乱码问题)

目录 一、介绍 二、字符编码过滤器 一、介绍 在传递参数时,tomcat8以上能处理get请求的中文乱码,danshibunengqingqiupost请求的中文乱码。 二、字符编码过滤器 对于出现的中文乱码问题,SpringMvc提供了处理中文乱码的过滤器,在…

短视频矩阵系统源码技术独立部署搭建

一、矩阵系统源码主要有三种框架: 矩阵系统源码主要有三种框架:Matplotlib、NumPy和SciPy。Matplotlib是一个用于制图的库,可用于绘制各种类型的图表,包括线图、散点图、柱状图等。NumPy是用于处理大型多维数组和矩阵的库&#x…

Canvas 低代码工具,多人自研开发全流程优化|ModelWhale 版本更新

白露时节、秋雨殷勤,ModelWhale 也迎来了新一轮的版本更新,多层面持续优化你的使用体验。 本次更新中,ModelWhale 主要进行了以下功能迭代: 优化 Canvas 多人自研开发流程(团队版✓) 新增 Canvas 组件历史…

AIGC 设计能替代真正的设计师设计吗?

AIGC 设计能替代真正的设计师设计吗? 目录 一、写在前面的话 二、AIGC 设计能替代真正的设计师吗? 1.1、传统设计师设计 1.2、AIGC设计 1.3、相关概念 1.4、观点分析 (1)、审美角度 (2)、版权角度 …

2023十大杰出外盘黄金交易APP平台最新排名

黄金,作为全球最重要的避险资产之一,一直备受投资者青睐。随着科技的发展,手机炒黄金APP平台逐渐成为投资者的新选择。本文将为您介绍“2023十大杰出外盘黄金交易APP平台最新排名”,帮助您选择合适的平台进行黄金投资。 本次排名…

埃文科技受邀出席“安全堤坝”技术论坛

2023年9月11日,2023年国家网络安全宣传周河南省活动开幕式暨河南省网络文明大会在开封博物馆开幕。由CCF YOCSEF郑州举办的“聚焦数据交易监管技术,筑牢数据交易‘安全堤坝’”技术论坛在开封市博物馆二楼会议厅举行。埃文科技总经理王永博士与副总经理武…

【深度学习】 Python 和 NumPy 系列教程(廿六):Matplotlib详解:3、多子图和布局:subplots()函数

目录 一、前言 二、实验环境 三、Matplotlib详解 1、2d绘图类型 2、3d绘图类型 3、多子图和布局 1. subplot()函数 2. subplots()函数 简单示例 一、前言 Python是一种高级编程语言,由Guido van Rossum于1991年创建。它以简洁、易读的语法而闻名&#xff0…

汽车电子 -- PCAN View 安装与使用

一、PCAN-View 简介 参看:PCAN-View PCAN View 是显示CAN和CAN FD报文的Window软件 PCAN-View 功能概述 PCAN-View for Windows软件是一款简便的CAN监视软件,可用于显示、发送、和记录CAN数据通讯。可手动和定期发送报文,用户可决定比特率…

ZABBIX 6.4官方安装文档

一、官网地址 Zabbix:企业级开源监控解决方案 二、下载 1.选择您Zabbix服务器的平台 2. Install and configure Zabbix for your platform a. Install Zabbix repository # rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/8/x86_64/zabbix-release-6.4-1.el8…

PoeAI:免费使用GPT-4的AI聊天机器人平台

【产品介绍】 • 名称 PoeAI • 成立/上线时间 2023年 • 具体描述 Poe.com是一个提供免费 AI 聊天机器人服务的平台,可以帮助用户解决各种问题,学习新知识,或者只是为了娱乐而聊天。用户可以通过手…

python连接mysql数据库进行增删改查

pymysql是在Python3.x版本中用于连接MySQL服务器的一个库,Python2中则使用mysqldb。 环境准备 python3.7 使用pip安装PyMySQL pip install pymysql先使用第三方工具连接mysql数据库,比如navicat连接mysql 连接名:随便命名 主机名或ip地…