Avatar
0
Hihi Teacher
Hihi Teacher
Hỏi về cách hoạt động của Filter trong Spring Security
Hi xin chào mọi người!

Khi làm việc với Spring Security thì mặc định sẽ có hàng loạt các filter liên tiếp nhau có nhiệm vụ Authentication và Authorization các request.Vậy khi chúng ta muốn sử dụng custom filter thì chúng ta phải config các addFilter, addFilterBefore, addFilterAfter.

Em có một câu hỏi muốn hỏi mọi người là:

TH1: Khi dùng addFilter thì custom filter sẽ vị trí nào trong dãy các filter của Spring Security?

TH2: Khi dùng addFilterBefore hay addFilterAfter thì filter được chỉ định mà custom filter đứng trước hoặc sau có hoạt động hay không (Với TH Before em có thắc mắc là khi custom filter được chạy thì nó sẽ thay thế filter được chỉ định hay khi nó chạy xong thì filter chỉ định phải chạy 1 lần nữa )?

Em cám ơn mọi người !

  • Answer
springsecurity
Remain: 5
3 Answers
Avatar
tvd12 Teacher
tvd12 Teacher
Cách đơn giản nhất là em vào thẳng source code đọc em sẽ thây hàm: addFilter và các hàm addFilterBefore, addFilterAfter và hàm performBuild nên khi mà em addFilterBefore, addFilterAfter bản chất là nó sẽ cấp cho mỗi thằng 1 cái order, đến khi build nó sẽ sort theo order đó. Vậy nên:

  1. TH1 em sẽ khó có thể biết filter em add vào sẽ nằm ở index bao nhiêu và khi nào được chạy
  2. anh chưa hiểu ý em, nhưng em cứ add filter vào là nó sẽ chạy em ạ
  • 0
  • Reply
Avatar
Hihi Teacher
Hihi Teacher
Cám ơn anh đã trả lời.Xin lỗi anh vì cách diễn đạt của em khó hiểu.

TH 2 của em là :

  1. Em có 1 customFilter extends UsernamePasswordAuthenticationFilter
  2. Sau đó em dùng hàm addFilterBefore(customFilter,UsernamePasswordAuthenticationFilter.class)

Theo em hiểu đơn giản là customFilter được gọi trước vì nó ở phía trước UsernamePasswordAuthenticationFilter mặc định  -> UsernamePasswordAuthenticationFilter mặc định ở phía sau có được gọi lần nữa không ạ hay customFilter sẽ thay thế luôn UsernamePasswordAuthenticationFilter ạ ?

P/s: Tại cái khái niệm add trước,add sau của Spring security làm em khó hiểu quá a ạ :(

 

  • 0
  • Reply
Avatar
monkey Teacher
monkey Teacher
nó sẽ gọi UsernamePasswordAuthenticationFilter sau đó đến customFilter em ạ, sẽ không có cái nào bị thay thế hoặc bỏ sót em ạ.
  • 0
  • Reply
Anh cho em hỏi là ví dụ của em dùng add trước

=> addFilterBefore(customFilter,UsernamePasswordAuthenticationFilter.class)

mà fiter mặc định vẫn chạy trước customFilter hả anh?

 –  Hihi 1634708689000
Nó chạy sau em ạ, vì em dùng hàm addFilterBefore thì customFilter sẽ được cho lên trước em ạ  –  monkey 1634778960000
Dạ vậy thì đúng như em hiểu rồi ạ.Nhưng từ lúc em tìm hiểu đến cái này thì em có một thắc mắc mong anh giải đáp đó là:

Nếu customFilter đã xử lí hết (ở đây là xác thực người dùng ) vậy thằng mặc định sẽ làm gì sau đó ạ?

Cám ơn anh rất nhiều vì đã trả lời em ạ !

 –  Hihi 1634854984000
Nó vẫn sẽ tiếp tục chạy hết các logic của nó em ạ, ví xác thực người dùng xong thì cái filter mặc định là in log, thì nó sẽ in ra log em ạ  –  monkey 1635271170000