מסנני WebFlux באביב

1. סקירה כללית

השימוש במסננים נפוץ ביישומי אינטרנט מכיוון שהם נותנים לנו דרך לשנות בקשה או תגובה מבלי לשנות את נקודות הקצה שלנו.

במדריך מהיר זה, נתאר דרכים אפשריות ליישומם באמצעות WebFlux Framework.

מכיוון שלא ניכנס לפרטים אודות מסגרת WebFlux עצמה, כדאי לעיין במאמר זה לקבלת פרטים נוספים.

2. תלות של Maven

קודם כל, בואו נכריז על התלות ב- WebFlux Maven:

 org.springframework.boot spring-boot-starter-webflux 

3. נקודות קצה

עלינו ליצור כמה נקודות קצה תחילה. אחת לכל שיטה: מבוססת ביאור ותפקודית.

נתחיל בבקר מבוסס ההערות:

@GetMapping (path = "/ users / {name}") מונו getName ציבורי (@PathVariable שם מחרוזת) {להחזיר Mono.just (שם); }

עבור נקודת הקצה הפונקציונלית עלינו ליצור מטפל תחילה:

@Component מחלקה ציבורית PlayerHandler {public mono getName (בקשת ServerRequest) {Mono name = Mono.just (request.pathVariable ("name")); החזר בסדר (). גוף (שם, String.class); }}

וגם מיפוי תצורת נתב:

מסלול RouterFunction ציבורי @ שעועית (PlayerHandler playerHandler) {return RouterFunctions .route (GET ("/ players / {name}"), playerHandler :: getName) .filter (דוגמה חדשהHandlerFilterFunction ()); }

4. סוגי מסנני WebFlux

מסגרת WebFlux מספקת שני סוגים של פילטרים: WebFilters ו- HandlerFilterFunctions.

ההבדל העיקרי ביניהם הוא בכךWebFilter יישומים עובדים על כל נקודות הקצה וHandlerFilterFunction יישומים יעבדו רק עבור נתבאלה מבוססי.

4.1. WebFilter

אנו ניישם א WebFilter כדי להוסיף כותרת חדשה לתגובה. כתוצאה מכך, על כל התגובות להתנהג כך:

מחלקה ציבורית @Component ExampleWebFilter מיישם את WebFilter {@Override mono filter filter (ServerWebExchange serverWebExchange, WebFilterChain webFilterChain) {serverWebExchange.getResponse () .getHeaders (). Add ("web-filter", "web-filter-test"); להחזיר webFilterChain.filter (serverWebExchange); }}

4.2. HandlerFilterFunction

עבור זה, אנו מיישמים לוגיקה המגדירה את מצב ה- HTTP ל- אסור כאשר הפרמטר "שם" שווה ל"מבחן ".

מחלקה ציבורית ExampleHandlerFilterFunction מיישם את HandlerFilterFunction {@Override Public Mono filter (ServerRequest serverRequest, HandlerFunction handlerFunction) {if (serverRequest.pathVariable ("name"). equalsIgnoreCase ("test")) {return ServerResponse.status (FORBIDD) (FORBIDD); } להחזיר handlerFunction.handle (serverRequest); }}

5. בדיקות

במסגרת WebFlux Framework יש דרך קלה לבדוק את המסננים שלנו: WebTestClient. זה מאפשר לנו לבדוק שיחות HTTP לנקודות הקצה שלנו.

להלן דוגמאות לנקודת הקצה מבוססת ההערה:

@Test ציבורי בטל כאשר UserNameIsBaeldung_thenWebFilterIsApplied () {EntityExchangeResult result = webTestClient.get () .uri ("/ users / baeldung"). Exchange () .expectStatus (). IsOk () .expectBody (String.class). ReturnResult); assertEquals (result.getResponseBody (), "baeldung"); assertEquals (result.getResponseHeaders (). getFirst ("מסנן רשת"), "מבחן מסנן רשת"); } @Test ציבורי בטל כאשר UserNameIsTest_thenHandlerFilterFunctionIsNotApplied () {webTestClient.get (). Uri ("/ users / test"). Exchange () .expectStatus (). IsOk (); }

ולנקודת הקצה הפונקציונלית:

@Test ציבורי בטל כאשר PlayerLayerNameIsBaeldung_thenWebFilterIsApplied () {EntityExchangeResult result = webTestClient.get () .uri ("/ players / baeldung") .exchange () .expectStatus (). IsOk () .expectBody (String.class). ReturnResult assertEquals (result.getResponseBody (), "baeldung"); assertEquals (result.getResponseHeaders (). getFirst ("מסנן רשת"), "מבחן מסנן רשת"); } @Test ציבורי בטל כאשרPlayerNameIsTest_thenHandlerFilterFunctionIsApplied () {webTestClient.get (). Uri ("/ players / test") .exchange () .expectStatus (). IsForbidden (); }

6. מסקנה

סקרנו את שני הסוגים של מסנני WebFlux במדריך זה ועייננו בכמה דוגמאות קוד.

לקבלת מידע נוסף אודות WebFlux Framework, עיין בתיעוד.

כמו תמיד, ניתן למצוא את קוד המקור המלא של הדוגמאות ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found