在springboot中攔截器Filter中注入bean失敗問題及解決
緣由
在做SSO項(xiàng)目時(shí)整合了shiro,在寫一個(gè)攔截器的時(shí)候(繼承AccessControlFilter)在這里需要注入一個(gè)Bean.
按正常的寫法如下:
@Autowired private RedisUtil<Object, Object> redisUtil;
這是我的一個(gè)操作redis的工具類。
這樣自動(dòng)去注入當(dāng)使用的時(shí)候是未NULL,是注入不進(jìn)去了。
通俗的來講是因?yàn)閿r截器在spring掃描bean之前加載所以注入不進(jìn)去。
解決方法
可以通過已經(jīng)初始化之后applicationContext容器中去獲取需要的bean.
public <T> T getBean(Class<T> clazz,HttpServletRequest request){
WebApplicationContext applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext());
return applicationContext.getBean(clazz);
}可以直接調(diào)用此方法得到想要的Bean
RedisUtil<String,Object> redisUtil = getBean(RedisUtil.class, request);
這樣就可以直接使用了。
注意*****
如果有其他配置類中有new 一個(gè)對(duì)象出來,這個(gè)對(duì)象是不會(huì)被springboot管理的,不管你在其他地方用什么方法去交給spring管理創(chuàng)建對(duì)象,怎么都會(huì)注入為null,所以怎么注入都為null時(shí)注意檢查手動(dòng)new的地方 !!!
錯(cuò)誤示例
SocketChannelInterceptor 這個(gè)對(duì)象是不會(huì)被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());
}總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java中final關(guān)鍵字和final的四種用法實(shí)例
final關(guān)鍵字代表最終的、不可改變的,下面這篇文章主要給大家介紹了關(guān)于Java中final關(guān)鍵字和final的四種用法實(shí)例,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02
springSecurity過濾web請(qǐng)求的項(xiàng)目實(shí)踐
SpringSecurity是一個(gè)功能強(qiáng)大的安全框架,提供了全面的 Web 安全功能,它的核心之一是過濾器鏈,用于攔截和處理 Web 請(qǐng)求,本文就來介紹SpringSecurity配置和使用過濾器來管理Web請(qǐng)求的安全性,感興趣的可以了解一下2025-09-09
淺析如何使用xstream實(shí)現(xiàn)javaBean與xml互轉(zhuǎn)
XStream 是一個(gè)用于將 Java 對(duì)象與 XML 之間進(jìn)行轉(zhuǎn)換的庫,它非常簡單易用,下面將詳細(xì)介紹如何使用 XStream 實(shí)現(xiàn) JavaBean 與 XML 之間的互轉(zhuǎn),需要的可以了解下2025-05-05
bootstrap.yml如何讀取nacos配置中心的配置文件
這篇文章主要介紹了bootstrap.yml讀取nacos配置中心的配置文件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
java對(duì)象類型轉(zhuǎn)換和多態(tài)性(實(shí)例講解)
下面小編就為大家?guī)硪黄猨ava對(duì)象類型轉(zhuǎn)換和多態(tài)性(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10

