3. 總結
我們在專案開發的時候有時候,有的需求場景可能需要自定義過濾器並指定其呼叫順序,那麼應該怎麼快速解決這個問題呢?
來看看下面的操作吧,非常的優雅,有3種方式。
用spring容器
識別處理,**如下:
@component
@order(1
)@slf4j
public
class
firstfilter
implements
filter",
req.
getrequesturi()
);filterchain.
dofilter
(servletrequest, servletresponse)
; log.
info
("committing a transaction for req : {}"
, req.
getrequesturi()
);}}
@component
@order(2
)@slf4j
public
class
secondfilter
implements
filter",
req.
getrequesturi()
);filterchain.
dofilter
(servletrequest, servletresponse)
; log.
info
("committing a transaction for req : {}"
, req.
getrequesturi()
);}}
結果日誌如下:
[nio-
8080
-exec-
3] com.laker.notes.easy.filter.firstfilter : starting a transaction for req :
/[nio-
8080
-exec-
3] c.laker.notes.easy.filter.secondfilter : starting a transaction for req :
/[nio-
8080
-exec-
3] c.laker.notes.easy.filter.secondfilter : committing a transaction for req :
/[nio-
8080
-exec-
3] com.laker.notes.easy.filter.firstfilter : committing a transaction for req :
/
缺點:無法指定過濾器攔截的路徑@webfilter
這個註解屬於servlet3+,與spring也沒有什麼關係,**如下:
@webfilter
("/*"
)@slf4j
public
class
secondfilter
implements
filter",
req.
getrequesturi()
);filterchain.
dofilter
(servletrequest, servletresponse)
; log.
info
("committing a transaction for req : {}"
, req.
getrequesturi()
);}}
@servletcomponentscan
public
class
}
缺點:無法指定多個filter的執行順序,@order註解在這裡即使指定了也不生效的包裝bean註冊方式
@bean
public filterregistrationbean
firstfilter()
@bean
public filterregistrationbean
secondfilter()
[nio-
8080
-exec-
1] c.laker.notes.easy.filter.secondfilter : starting a transaction for req :
/[nio-
8080
-exec-
1] com.laker.notes.easy.filter.firstfilter : starting a transaction for req :
/[nio-
8080
-exec-
1] com.laker.notes.easy.filter.firstfilter : committing a transaction for req :
/[nio-
8080
-exec-
1] c.laker.notes.easy.filter.secondfilter : committing a transaction for req :
/
這種就很舒服既可以設定過濾的路徑,又可以設定執行順序
@order
(value = ordered.highest_precedence)
@component
@webfilter
(filtername =
"contentcachingfilter"
, urlpatterns =
"/*"
)public
class
contentcachingfilter
extends
onceperrequestfilter
}
目前有三種方式可以自定義過濾器
方式執行順序
攔截請求
@component+@order()✔️
❌@webfilter+@servletcomponentscan❌
✔️filterregistrationbean✔️
✔️**繼承onceperrequestfilter **
自定義Spring Boot裝配
spring boot自動配置會嘗試根據新增的jar依賴項自動配置spring應用程式。使用 componentscan 查詢您的bean 和使用 autowired 進行建構函式注入 自動配置類使用 conditionalonclass和 conditionalo singbean注釋,condi...
springboot自定義事務
1.在springboot專案中service的實現類可以通過註解 transactional新增事務 1.1 如果在service層用了try catch,在catch裡面再丟擲乙個 runtimeexception異常,這樣出了異常才會回滾 1.2你還可以直接在catch後面寫一句回滾 tran...
springboot自定義配置
1 說明 springboot的開發中,我們有些時候,需要將一些引數寫進yml配置,方便部署後修改,這時我們便可以使用springboot 提供的自定義配置的功能了 2 引入依賴 dependency groupid org.springframework.boot groupid artifact...