מדריך לאביב 5 WebFlux

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

Spring WebFlux הוא חלק מ- Spring 5 ומספק תמיכה בתכנות תגובתי ליישומי אינטרנט.

במדריך זה, ניצור יישום REST תגובתי קטן באמצעות רכיבי האינטרנט המגיבים RestController ו WebClient.

אנו נבחן גם כיצד לאבטח את נקודות הקצה התגובות שלנו באמצעות Spring Security.

2. מסגרת WebFlux האביבית

Spring WebFlux משתמש באופן פנימי ב- Project Reactor וביישומי המפרסמים שלו - שֶׁטֶף ו מונו.

המסגרת החדשה תומכת בשני מודלי תכנות:

  • רכיבים תגובתיים מבוססי ביאורים
  • ניתוב וטיפול פונקציונלי

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

3. תלות

נתחיל עם ה- אביב-אתחול-התחלה-ווב-שטף תלות, המושכת את כל התלות הנדרשת אחרת:

  • קפיץ-מגף ו אביב-אתחול-מתנע להגדרת יישום בסיסי של Boot Boot
  • אביב-שטף אינטרנט מִסגֶרֶת
  • כור ליבת שאנחנו צריכים זרמים תגובתי וגם כור-נט
 org.springframework.boot spring-boot-starter-webflux 2.2.6.RELEASE 

ניתן להוריד את אביב-אתחול-המתחיל-ווב-פלוס מ Maven Central.

4. יישום REST תגובתי

כעת נבנה REST תגובתי פשוט מאוד ניהול עובדים יישום - באמצעות Spring WebFlux:

  • נשתמש במודל תחום פשוט - עוֹבֵד עם תְעוּדַת זֶהוּת ו שֵׁם שדה
  • אנו בונים ממשק API REST עם RestController לפרסם עוֹבֵד משאבים כמשאב יחיד וכאוסף
  • נבנה איתו לקוח WebClient כדי לאחזר את אותו משאב
  • ניצור נקודת קצה תגובית מאובטחת באמצעות WebFlux ובטחון אביב

5. תגובתי RestController

Spring WebFlux תומך בתצורות מבוססות הערות באופן זהה למסגרת ה- MVC של Spring Web.

להתחיל עם, בשרת, אנו יוצרים בקר מסומן המפרסם זרם תגובתי של ה- עוֹבֵד מַשׁאָב.

בואו ניצור את ההערות שלנו עובד עובד:

@RestController @RequestMapping ("/ עובדים") מעמד ציבורי EmployeeController {סופי פרטי EmployeeRepository עובדRepository; // קונסטרוקטור ...}

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

5.1. משאב יחיד

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

@GetMapping ("/ {id}") מונו פרטי פרטי getEmployeeById (@PathVariable מזהה מחרוזת) {return workerRepository.findEmployeeById (id); }

אנחנו עוטפים סינגל עוֹבֵד משאב ב מונו כי אנחנו מחזירים לכל היותר עובד אחד.

5.2. משאב אוסף

בואו נוסיף גם נקודת קצה המפרסמת את משאב האיסוף של כולם עובדים:

@GetMapping שטף פרטי getAllEmployees () {להחזיר עובדRepository.findAllEmployees (); }

עבור משאב האיסוף, אנו משתמשים ב- שֶׁטֶף מהסוג עוֹבֵד - מכיוון שזה המו"ל של 0.אלמנטים .n.

6. לקוח אינטרנט תגובתי

WebClient שהוצג באביב 5 הוא לקוח לא חוסם עם תמיכה בזרמים תגובתי.

אנחנו יכולים להשתמש WebClient כדי ליצור לקוח לאחזור נתונים מנקודות הקצה שמספק ה- עובד עובד.

בואו ניצור פשוט EmployeeWebClient:

מחלקה ציבורית EmployeeWebClient {WebClient client = WebClient.create ("// localhost: 8080"); // ...}

כאן יצרנו א WebClient בשיטת המפעל שלה לִיצוֹר. זה יצביע על מקום אירוח מקומי: 8080 כדי שנוכל להשתמש בכתובות אתרים יחסיות לשיחות שבוצעו על ידי מופע לקוח זה.

6.1. אחזור משאב יחיד

כדי לאחזר משאב יחיד מסוג מונו מנקודת הקצה /תג עובד}:

מונו עובדMono = client.get () .uri ("/ עובדים / {id}", "1") .חזור () .bodyToMono (שכיר עובד); employeeMono.subscribe (System.out :: println);

6.2. אחזור משאב אוסף

באופן דומה, כדי לאחזר משאב אוסף מסוג שֶׁטֶף מנקודת הקצה / עובדים:

Flux workerFlux = client.get () .uri ("/ עובדים"). Retrieve () .bodyToFlux (שכיר עובד); employeeFlux.subscribe (System.out :: println);

יש לנו גם מאמר מפורט על הגדרה ועבודה עם WebClient.

7. אביב WebFlux אבטחה

אנו יכולים להשתמש באבטחת אביב כדי לאבטח את נקודות הקצה התגובות שלנו.

נניח שיש לנו נקודת סיום חדשה שלנו עובד עובד. נקודת קצה זו מתעדכנת עוֹבֵד פרטים ומחזיר את המעודכן עוֹבֵד.

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

בואו נוסיף שיטה חדשה שלנו עובד עובד:

@PostMapping ("/ update") פרטי עדכון מונו פרטי (עובד שכיר @RequestBody) {החזר עובדRepository.update עובד (עובד); }

עכשיו, כדי להגביל את הגישה לשיטה זו בואו ניצור אבטחהקונפיג ולהגדיר כמה כללים מבוססי נתיב שיאפשרו רק למשתמשי ADMIN:

@EnableWebFluxSecurity המחלקה הציבורית EmployeeWebSecurityConfig {// ... @Bean Security SecurityWebFilterChain springSecurityFilterChain (ServerHttpSecurity http) {http.csrf (). Disable () .authorizeExchange () .pathMatchers (HttpMethod.POST,). ("ADMIN") .pathMatchers ("/ **"). PermitAll () .and () .httpBasic (); החזר http.build (); }}

תצורה זו תגביל את הגישה לנקודת הקצה / עובדים / עדכון. לכן רק למשתמשים יש תפקיד מנהל יוכלו לגשת לנקודת קצה זו ולעדכן קיים עוֹבֵד.

לבסוף, ההערה @EnableWebFluxSecurity מוסיף תמיכה ב- Spring Security WebFlux עם כמה תצורות ברירת מחדל.

יש לנו גם מאמר מפורט על קביעת תצורה ועבודה עם אבטחת Spring WebFlux.

8. מסקנה

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

למדנו להשתמש RestController ו WebClient לפרסם ולצרוך זרמים ריאקטיביים.

בדקנו גם כיצד ליצור נקודת סיום תגובתי מאובטחת בעזרת Spring Security.

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

יש לנו מאמר מפורט המתמקד בעבודה עם תגובתי WebSocket עם אביב 5.

לבסוף, קוד המקור השלם המשמש במדריך זה זמין ב- Github.


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