广告
返回顶部
首页 > 资讯 > 后端开发 > Python >在zuulFilter中注入bean失败的解决方案
  • 554
分享到

在zuulFilter中注入bean失败的解决方案

2024-04-02 19:04:59 554人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

zuulFilter注入bean失败 一、为什么要用到这个 上周想实现在网关层 zuul 实现用户认证操作,即需要在网关过滤器中调用其他的微服务,按常规做法在 filter 中用 @

zuulFilter注入bean失败

一、为什么要用到这个

上周想实现在网关层 zuul 实现用户认证操作,即需要在网关过滤器中调用其他的微服务,按常规做法在 filter 中用 @Autowired 注解一个feign 接口,启动 一直失败,用度娘谷歌查了又查,只找到一些类似【在过滤器中注入bean】失败,但说的都是springMVC 并不是SpringCloud中的网关层

二、解决方法

查了很久,最终发现问题所在,其实在启动报错就提示很明显了,找不到相关实例,没错feign接口的实现类事实上在其他微服务中,自然不能用常规方法去注入,解决方法其实也很简单,就是在 启动类中 加入注解


@EnableFeignClient

声明这个 zuul 也是一个需要 feign 客户端,问题解决。

过滤器使用与bean注入

一、WEB.xml中各元素启动顺序

项目启动时,监听器listener最先初始化,然后是过滤器filter,最后是servlet。

spring监听器在启动时会读取spring配置文件,进行spring容器的初始化。springmvc的dispatcherServlet初始化时会读取springMVC的配置文件,进行springMVC容器的初始化。Spring容器初始化时会实例化各个bean。(个人认为web容器初始化时其中的各元素是按上述顺序依次初始化的,其他元素全部初始化完成之后web容器才初始化完成。但目前没有看到过一个十分确切的说法,等以后有时间研究一下源码)。

二、过滤器的使用

网上很多资料说在过滤器中拿不到spring注入的bean,原因是过滤器初始化时spring容器还没初始化好,其实并不是。下面看一段代码:

在web.xml中定义过滤器:


<filter>
  <filter-name>demoFilter</filter-name>  
  <filter-class>xx.framework.filter.demoFilter</filter-class>
</filter>
<filter-mapping>  
<filter-name>demoFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

然后在过滤器的初始化方法init中:


@Override
public void init(FilterConfig filterConfig) throws ServletException {
    ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(filterConfig.getServletContext());
    RedisTemplate demoBean = (RedisTemplate)context.getBean("redisTemplate");
    System.out.println(demoBean);
 }

经过测试,此时是可以拿到spring中的redisTemplate 这个bean的,说明spring容器确实先于过滤器初始化的。那么回到过滤器中不能注入bean的问题,原因究竟是什么呢?可以看到,这里获取bean是通过applicationContext获取的,而不是直接注入的。

个人理解是:过滤器是servlet规范中定义的,并不归spring容器管理,也无法直接注入spring中的bean(会报错)。当然,要想通过spring注入的方式来使用过滤器也是有办法的,先在web.xml中定义:


<filter>
  <filter-name>DelegatingFilterProxy</filter-name> 
  <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  <init-param>
    <param-name>targetBeanName</param-name>
    <param-value>demoFilter</param-value>
  </init-param>
  <init-param>
    <param-name>targetFilterLifecycle</param-name>
    <param-value>true</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>DelegatingFilterProxy</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

然后在spring容器中配置demoFilter这个bean:


<bean id="demoFilter" class="xx.framework.filter.demoFilter" />

在doFilter方法中可以获取到注入的bean了:


@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException {
   System.out.println(redisTemplate.getClientList());
}

其中redisTemplate是通过@Resource注解注入进来的。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 在zuulFilter中注入bean失败的解决方案

本文链接: https://www.lsjlt.com/news/130169.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 在zuulFilter中注入bean失败的解决方案
    zuulFilter注入bean失败 一、为什么要用到这个 上周想实现在网关层 zuul 实现用户认证操作,即需要在网关过滤器中调用其他的微服务,按常规做法在 filter 中用 @...
    99+
    2022-11-12
  • zuulFilter中注入bean失败如何解决
    今天就跟大家聊聊有关zuulFilter中注入bean失败如何解决,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。zuulFilter注入bean失败一、为什么要用到这个上周想实现在网...
    99+
    2023-06-20
  • Spring拦截器中注入Bean失败解放方案详解
    目录简介问题重现解决方案简介 说明 本文用示例介绍如何解决拦截器中注入Bean失败的问题。 场景 Token拦截器中需要用@Autowired注入JavaJwtUtil类,结果发现注...
    99+
    2022-11-13
  • RocketMQTemplate 注入失败的解决
    RocketMQTemplate 注入失败 在使用rocketmq 发送消息时,会发现 @Autowired private RocketMQTemplate rocketM...
    99+
    2022-11-12
  • Spring自动注入失败的解决方法
    目录Spring自动注入失败如何解决?回答注入你的bean使用@Configurable手动查找bean:不推荐Spring自动注入失败如何解决? 我有一个被Spring @Ser...
    99+
    2022-11-12
  • Spring静态变量/构造函数注入失败的解决方案
    目录1、案例1:Spring对静态变量的注入为空2、案例2:在构造函数中使用Spring容器中的Bean对象,得到的结果为空补充1、案例1:Spring对静态变量的注入为空 案例代码...
    99+
    2022-11-12
  • maven引入mysql-connector-java包失败的解决方案
    目录maven引入mysql-connector-java包失败报错如下加上了<scope>runtime</scope>总结maven引入mysql-con...
    99+
    2023-02-27
    maven引入mysql-connector-java mysql-connector-java包 引入mysql-connector-java包失败
  • Springboot的spring-boot-maven-plugin导入失败的解决方案
    Springboot spring-boot-maven-plugin导入失败 因为之前换了本地仓库,再打开项目的时候就变成红色了,问题是其他依赖都导好了,只有这个家伙红的刺眼。 找...
    99+
    2022-11-12
  • Android在启动adb时失败解决方案
    今天在开发Android时启动adb时遇见了这个问题。因为我更新了最新的adt出现ADB server didn't ACK, failed to start daemon 然...
    99+
    2022-06-06
    adb 解决方案 Android
  • spring cloud中Feign导入jar失败的问题及解决方案
    目录Feign导入jar失败的问题网上很多人在使用的feign时在pom.xml中填写的是用以下的方式也能够完美导入feignSpringcloudfeign异常报错及解决报错异常如...
    99+
    2022-11-13
  • Spring 父类变量注入失败的解决
    目录Spring 父类变量注入失败下面小记下这个过程Spring通过父类注入公用属性的技巧XML配置方式提取父类Annotation方式提取父类Spring 父类变量注入失败 昨天遇...
    99+
    2022-11-12
  • Java @Async注解导致spring启动失败解决方案详解
    目录前言一、异常表现,抛出内容1.1循环依赖的两个class1.2启动报错二、原因分析2.1主要原因2.2循环依赖放入二级缓存处逻辑2.3initializeBean生成的对象2.4...
    99+
    2022-11-12
  • 解决netty中spring对象注入失败的问题
    目录netty中spring对象注入失败发现了问题所在在netty中注入spring成份可以通过以下方式netty中spring对象注入失败 今天在做项目的时候发现在netty中注入...
    99+
    2022-11-13
  • netty中spring对象注入失败怎么解决
    本文小编为大家详细介绍“netty中spring对象注入失败怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“netty中spring对象注入失败怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。net...
    99+
    2023-06-29
  • nginx.pid打开失败以及失效的解决方案
    目录一、问题描述二、问题出现分析三、解决方案方案1:创建目录方案2:重新指定一个配置文件方案3:修改默认的pid一、问题描述 在我们平常使用nginx的时候,经常有可能会发现我们的p...
    99+
    2022-11-12
  • 解决Spring在Thread中注入Bean无效的问题
    目录在Thread中注入Bean无效错误的注入方法通过封装Thread子类注入通过外部引入Spring多线程中bean的注入问题网上的主要解决方法有在Thread中注入Bean无效 ...
    99+
    2022-11-13
  • 在Filter中不能注入bean的问题及解决
    目录Filter中不能注入bean的问题Filter中注入bean 无效为null问题原因解决办法Filter中不能注入bean的问题 WebApplicationContext...
    99+
    2022-11-12
  • springboot使用@value注入配置失败的解决
    目录springboot使用@value注入配置文件失败问题解决方向一问题解决方向二@Value注入失败,注入值为null的问题大概就是下面这样结果不知道为什么,@Value注入一直...
    99+
    2022-11-12
  • navicat导入Excel失败的解决方法
    小编给大家分享一下navicat导入Excel失败的解决方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!最近刚安装完navicat ,准备导入工作数据进去,excel文件(xlsx格式),按...
    99+
    2022-10-18
  • Windows中Mysql启动失败的完美解决方案
    目录一、问题描述1.1、mysql服务启动失败11.2、mysql服务启动失败2二、针对一的解决办法2.1、问题解析2.2、解决办法2.2.1、存在数据的情况三、数据恢复3.1、mysql数据恢复【Mysql问题】Win...
    99+
    2022-10-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作