在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 根据网络URL获取该网页上面所有的img标签并下载图片
这篇文章主要介绍了Java 根据网络URL获取该网页上面所有的img标签并下载图片,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下2020-11-11
Spring中的@ExceptionHandler异常拦截器
这篇文章主要介绍了Spring中的@ExceptionHandler异常拦截器,Spring的@ExceptionHandler可以用来统一处理方法抛出的异常,给方法加上@ExceptionHandler注解,这个方法就会处理类中其他方法抛出的异常,需要的朋友可以参考下2024-01-01
SpringBoot+WebSocket+Netty实现消息推送的示例代码
这篇文章主要介绍了SpringBoot+WebSocket+Netty实现消息推送的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-04-04
使用IDEA启动项目遇见ClassNotFoundException的解决方案
这篇文章主要介绍了使用IDEA启动项目遇见ClassNotFoundException的正确解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-06-06
SpringBoot测试之@SpringBootTest与MockMvc的实战应用小结
本文将深入探讨SpringBoot测试中两个核心工具:@SpringBootTest注解与MockMvc测试框架的实战应用,帮助开发者构建更稳健的测试体系,提高代码质量与可维护性,感兴趣的朋友一起看看吧2025-03-03


最新评论