前言
最近在負責做鑒權認證這一塊,初學遇到很多問題,特別是天天都出現的空指針異常。
廢話不多說,說說我遇到的問題。
.... @Slf4j public class JWTAuthorizationFilter extends BasicAuthenticationFilter { @Autowired private SysUserDao sysUserDao; ....
問題1 :在過濾器中使用 @Autowired 為null
經過百度之后,知道
Spring中,web應用啟動的順序是:listener->filter->servlet,先初始化listener,然后再來就filter的初始化,再接着才到我們的dispathServlet的初始化,因此,當我們需要在filter里注入一個注解的bean時,就會注入失敗,因為filter初始化時,注解的bean還沒初始化,沒法注入。
簡答理解:過濾器的生命優先級比較高,還沒加載后面的bean之類的東西,spring無法幫你注入
解決方法:
1 //獲取容器 2 ServletContext context = request.getServletContext(); 3 ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(context); 4 5 bean xxx = ctx.getBean(bean.class);
問題2:過濾器使用 @Value 為null
使用過多種方法,我的大概理解和上面的原因一樣,不知道對不對,有沒有高手指錯。
問了小伙伴之后,推薦我去用 Environment
百度之后知道:
Environment 用來表示整個應用運行時的環境,為了更形象地理解Environment,你可以把Spring應用的運行時簡單地想象成兩個部分:一個是Spring應用本身,一個是Spring應用所處的環境。
如此一來可以簡單試試看,利用上面的方法獲取bean,然后讀取yml文件:
Environment environment = ctx.getBean(Environment.class); String jasyptSecretKey = environment.getProperty("jwt.secretkey");
————————————————
版權聲明:本文為CSDN博主「我想吃豬蹄」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_38936572/article/details/105076249