springBoot過濾器注入Bean的空指標問題

2021-09-19 13:32:28 字數 1217 閱讀 8869

在過濾器中的dofilterinternal寫業務**時,需要用到spring bean元件,發現在過濾器中無法初始化bean元件,均為nullpointexception,經檢查掃瞄包路徑沒問題。最終確定容器載入順序引發的問題,在web.xml中各個元素的執行順序是這樣的,context-->param-->listener-->filter-->servlet可以看出在spring mvc 的dispatcherservlet初始化之前過濾器就已經載入好了,所以注入的是null。

解決思路是dofilterinternal使用spring上下文取獲取相應的bean元件,對於spring boot我們可以使用以下步驟來解決

第一步:建立上下文工具類springcontextutil

@component

//設定上下文

@override

throws bean***ception

//獲取上下文

return context;

}// 通過名字獲取上下文的bean

public static t getbean(string beanname)

//通過型別獲取上下文的bean

public static t setbean(class> requiredtype)

// 國際化使用

public static string getmessage(string key)

// 獲取當前環境

public static string getactiveprofiles()

// 判斷當前環境是否為test/local

第三步:在相應的業務**中 使用springcontextutil.getbean("***") 獲取相應的bean元件即可,如:

SpringBoot 過濾器總結

1 對過濾器使用 component註解或者在配置類中使用 bean註解,但這種方式有個弊端就是攔截所有請求 2 使用 webfilter註解可以指定攔截url,但此方式也存在弊端多個過濾器無法指定優先順序 3 使用filterregistrationbean方式建立過濾器可以指定過濾器優先順序 1...

SpringBoot過濾器的使用

只需要建立乙個過濾器就搞定了。webfilter urlpatterns public class customfilter implements filter override public void dofilter servletrequest servletrequest,servletre...

Vue 過濾器案例(全域性過濾器和區域性過濾器)

doctype html en utf 8 viewport content width device width,initial scale 1.0 js vue 2.4.0 js script 過濾器 title head 兩個過濾器的名稱都為msgformat,但是控制不同作用,乙個是全域性的...