返回顶部
首页 > 资讯 > 精选 >zuulFilter中注入bean失败如何解决
  • 958
分享到

zuulFilter中注入bean失败如何解决

2023-06-20 15:06:18 958人浏览 薄情痞子
摘要

今天就跟大家聊聊有关zuulFilter中注入bean失败如何解决,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。zuulFilter注入bean失败一、为什么要用到这个上周想实现在网

今天就跟大家聊聊有关zuulFilter中注入bean失败如何解决,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

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中:

@Overridepublic 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了:

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

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

看完上述内容,你们对zuulFilter中注入bean失败如何解决有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网精选频道,感谢大家的支持。

--结束END--

本文标题: zuulFilter中注入bean失败如何解决

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

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

猜你喜欢
  • zuulFilter中注入bean失败如何解决
    今天就跟大家聊聊有关zuulFilter中注入bean失败如何解决,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。zuulFilter注入bean失败一、为什么要用到这个上周想实现在网...
    99+
    2023-06-20
  • 在zuulFilter中注入bean失败的解决方案
    zuulFilter注入bean失败 一、为什么要用到这个 上周想实现在网关层 zuul 实现用户认证操作,即需要在网关过滤器中调用其他的微服务,按常规做法在 filter 中用 @...
    99+
    2024-04-02
  • RocketMQTemplate 注入失败如何解决
    今天就跟大家聊聊有关RocketMQTemplate 注入失败如何解决,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。RocketMQTemplate 注入失败在使用rocketmq ...
    99+
    2023-06-20
  • SpringBoot @Componet注解注入失败如何解决
    今天小编给大家分享一下SpringBoot @Componet注解注入失败如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
    99+
    2023-07-05
  • Spring拦截器中注入Bean失败解放方案详解
    目录简介问题重现解决方案简介 说明 本文用示例介绍如何解决拦截器中注入Bean失败的问题。 场景 Token拦截器中需要用@Autowired注入JavaJwtUtil类,结果发现注...
    99+
    2024-04-02
  • RocketMQTemplate 注入失败的解决
    RocketMQTemplate 注入失败 在使用rocketmq 发送消息时,会发现 @Autowired private RocketMQTemplate rocketM...
    99+
    2024-04-02
  • 如何解决Spring自动注入失败的问题
    小编给大家分享一下如何解决Spring自动注入失败的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Spring自动注入失败如何解决?我有一个被Spring @...
    99+
    2023-06-15
  • 解决@FeignClient注入service失败问题
    目录@FeignClient注入service失败Feign注入失败之坑错误信息加上之后,问题解决@FeignClient注入service失败 在入口类上方加入注解 @Enable...
    99+
    2024-04-02
  • @FeignClient注入service失败怎么解决
    今天小编给大家分享一下@FeignClient注入service失败怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。@...
    99+
    2023-06-29
  • netty中spring对象注入失败怎么解决
    本文小编为大家详细介绍“netty中spring对象注入失败怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“netty中spring对象注入失败怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。net...
    99+
    2023-06-29
  • SpringBoot如何通过注解注入Bean
    这篇文章主要为大家展示了“SpringBoot如何通过注解注入Bean”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SpringBoot如何通过注解注入Bean”这篇文章吧。1、背景我们谈到Sp...
    99+
    2023-06-29
  • 解决netty中spring对象注入失败的问题
    目录netty中spring对象注入失败发现了问题所在在netty中注入spring成份可以通过以下方式netty中spring对象注入失败 今天在做项目的时候发现在netty中注入...
    99+
    2024-04-02
  • windows延缓写入失败如何解决
    这篇文章主要介绍“windows延缓写入失败如何解决”,在日常操作中,相信很多人在windows延缓写入失败如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”window...
    99+
    2023-01-29
    windows
  • 导入SpringCloud依赖失败如何解决
    这篇“导入SpringCloud依赖失败如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“导入SpringCloud依赖...
    99+
    2023-07-06
  • Spring自动注入失败的解决方法
    目录Spring自动注入失败如何解决?回答注入你的bean使用@Configurable手动查找bean:不推荐Spring自动注入失败如何解决? 我有一个被Spring @Ser...
    99+
    2024-04-02
  • Spring 父类变量注入失败的解决
    目录Spring 父类变量注入失败下面小记下这个过程Spring通过父类注入公用属性的技巧XML配置方式提取父类Annotation方式提取父类Spring 父类变量注入失败 昨天遇...
    99+
    2024-04-02
  • win7注册ocx控件失败如何解决
    注册OCX控件失败可能由多种原因引起,以下是一些可能的解决方法:1. 确保以管理员身份运行命令提示符:右键点击命令提示符,选择“以管...
    99+
    2023-10-09
    win7
  • win10注册ocx加载失败如何解决
    出现Win10注册ocx加载失败的情况,可能是由于ocx文件缺失或者注册不正确引起的。可以尝试以下几种解决方法:1. 确认ocx文件...
    99+
    2023-09-09
    win10
  • SpringMVC @RequestBody属性名大写字母注入失败如何解决
    这篇文章主要讲解了“SpringMVC @RequestBody属性名大写字母注入失败如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringMVC @Requ...
    99+
    2023-07-06
  • thinkphp中网站缓存写入失败如何解决
    thinkphp中网站缓存写入失败如何解决,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、错误如下:2、修改Cache权限为777,如下...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作