在springboot中拦截器Filter中注入bean失败问题及解决

 更新时间:2024年05月17日 09:29:14   作者:解咚咚  
这篇文章主要介绍了在springboot中拦截器Filter中注入bean失败问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

缘由

在做SSO项目时整合了shiro,在写一个拦截器的时候(继承AccessControlFilter)在这里需要注入一个Bean.

按正常的写法如下:

@Autowired
private RedisUtil<Object, Object> redisUtil;

这是我的一个操作redis的工具类。

这样自动去注入当使用的时候是未NULL,是注入不进去了。

通俗的来讲是因为拦截器在spring扫描bean之前加载所以注入不进去。

解决方法

可以通过已经初始化之后applicationContext容器中去获取需要的bean.

public <T> T getBean(Class<T> clazz,HttpServletRequest request){
        WebApplicationContext applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext());
        return applicationContext.getBean(clazz);
    }

可以直接调用此方法得到想要的Bean

RedisUtil<String,Object> redisUtil = getBean(RedisUtil.class, request);

这样就可以直接使用了。

注意*****

如果有其他配置类中有new 一个对象出来,这个对象是不会被springboot管理的,不管你在其他地方用什么方法去交给spring管理创建对象,怎么都会注入为null,所以怎么注入都为null时注意检查手动new的地方 !!!

错误示例

    SocketChannelInterceptor 这个对象是不会被spring管理的。
    @Override
    public void configureClientInboundChannel(ChannelRegistration registration) {
        registration.interceptors( new SocketChannelInterceptor());
    }

    @Override
    public void configureClientOutboundChannel(ChannelRegistration registration) {
        registration.interceptors( new SocketChannelInterceptor());
    }

正确示例

    @Bean
    public SocketChannelInterceptor getSocketChannelInterceptor(){
        return  new SocketChannelInterceptor();
    }


    @Override
    public void configureClientInboundChannel(ChannelRegistration registration) {
        registration.interceptors( getSocketChannelInterceptor());
    }

    @Override
    public void configureClientOutboundChannel(ChannelRegistration registration) {
        registration.interceptors( getSocketChannelInterceptor());
    }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java HashMap底层实现原理

    Java HashMap底层实现原理

    HashMap在不同的JDK版本下的实现是不同的,在JDK1.7时,HashMap 底层是通过数组+链表实现的;而在JDK1.8时,HashMap底层是通过数组+链表或红黑树实现的,本详细介绍了HashMap底层是如何实现的,需要的朋友可以参考下
    2023-05-05
  • Java 根据网络URL获取该网页上面所有的img标签并下载图片

    Java 根据网络URL获取该网页上面所有的img标签并下载图片

    这篇文章主要介绍了Java 根据网络URL获取该网页上面所有的img标签并下载图片,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-11-11
  • 详解java中spring里的三大拦截器

    详解java中spring里的三大拦截器

    在本篇文章里我们给大家详细讲述了java中spring里的三大拦截器相关知识点以及用法代码,需要的朋友们学习下。
    2018-10-10
  • JAVA面向对象 封装原理及实例解析

    JAVA面向对象 封装原理及实例解析

    这篇文章主要介绍了JAVA面向对象 封装原理及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Spring中的@ExceptionHandler异常拦截器

    Spring中的@ExceptionHandler异常拦截器

    这篇文章主要介绍了Spring中的@ExceptionHandler异常拦截器,Spring的@ExceptionHandler可以用来统一处理方法抛出的异常,给方法加上@ExceptionHandler注解,这个方法就会处理类中其他方法抛出的异常,需要的朋友可以参考下
    2024-01-01
  • 解决IDEA中快捷键Alt+Enter不能使用的问题

    解决IDEA中快捷键Alt+Enter不能使用的问题

    这篇文章主要介绍了解决IDEA中快捷键Alt+Enter不能使用的问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • SpringBoot+WebSocket+Netty实现消息推送的示例代码

    SpringBoot+WebSocket+Netty实现消息推送的示例代码

    这篇文章主要介绍了SpringBoot+WebSocket+Netty实现消息推送的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 使用IDEA启动项目遇见ClassNotFoundException的解决方案

    使用IDEA启动项目遇见ClassNotFoundException的解决方案

    这篇文章主要介绍了使用IDEA启动项目遇见ClassNotFoundException的正确解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • SpringBoot测试之@SpringBootTest与MockMvc的实战应用小结

    SpringBoot测试之@SpringBootTest与MockMvc的实战应用小结

    本文将深入探讨SpringBoot测试中两个核心工具:@SpringBootTest注解与MockMvc测试框架的实战应用,帮助开发者构建更稳健的测试体系,提高代码质量与可维护性,感兴趣的朋友一起看看吧
    2025-03-03
  • java8新特性 stream流的方式遍历集合和数组操作

    java8新特性 stream流的方式遍历集合和数组操作

    这篇文章主要介绍了java8新特性 stream流的方式遍历集合和数组操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08

最新评论