在springboot中攔截器Filter中注入bean失敗問(wèn)題及解決
緣由
在做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)去了。
通俗的來(lái)講是因?yàn)閿r截器在spring掃描bean之前加載所以注入不進(jìn)去。
解決方法
可以通過(guò)已經(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ì)象出來(lái),這個(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 根據(jù)網(wǎng)絡(luò)URL獲取該網(wǎng)頁(yè)上面所有的img標(biāo)簽并下載圖片
這篇文章主要介紹了Java 根據(jù)網(wǎng)絡(luò)URL獲取該網(wǎng)頁(yè)上面所有的img標(biāo)簽并下載圖片,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-11-11Spring中的@ExceptionHandler異常攔截器
這篇文章主要介紹了Spring中的@ExceptionHandler異常攔截器,Spring的@ExceptionHandler可以用來(lái)統(tǒng)一處理方法拋出的異常,給方法加上@ExceptionHandler注解,這個(gè)方法就會(huì)處理類中其他方法拋出的異常,需要的朋友可以參考下2024-01-01解決IDEA中快捷鍵Alt+Enter不能使用的問(wèn)題
這篇文章主要介紹了解決IDEA中快捷鍵Alt+Enter不能使用的問(wèn)題,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12SpringBoot+WebSocket+Netty實(shí)現(xiàn)消息推送的示例代碼
這篇文章主要介紹了SpringBoot+WebSocket+Netty實(shí)現(xiàn)消息推送的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04使用IDEA啟動(dòng)項(xiàng)目遇見ClassNotFoundException的解決方案
這篇文章主要介紹了使用IDEA啟動(dòng)項(xiàng)目遇見ClassNotFoundException的正確解決方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06SpringBoot測(cè)試之@SpringBootTest與MockMvc的實(shí)戰(zhàn)應(yīng)用小結(jié)
本文將深入探討SpringBoot測(cè)試中兩個(gè)核心工具:@SpringBootTest注解與MockMvc測(cè)試框架的實(shí)戰(zhàn)應(yīng)用,幫助開發(fā)者構(gòu)建更穩(wěn)健的測(cè)試體系,提高代碼質(zhì)量與可維護(hù)性,感興趣的朋友一起看看吧2025-03-03java8新特性 stream流的方式遍歷集合和數(shù)組操作
這篇文章主要介紹了java8新特性 stream流的方式遍歷集合和數(shù)組操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08