在過濾器中的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,但是控制不同作用,乙個是全域性的...