Spring Boot2 自定義過濾器

2021-10-12 04:41:42 字數 3533 閱讀 8455

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...