Útmutató az 5. tavaszi WebFluxhoz

1. Áttekintés

A Spring WebFlux az 5. tavasz része, és reaktív programozási támogatást nyújt a webes alkalmazásokhoz.

Ebben az oktatóanyagban egy kis, reaktív REST alkalmazást hozunk létre a reaktív web-összetevők felhasználásával RestController és Webkliens.

Megvizsgáljuk azt is, hogy miként biztosíthatjuk reaktív végpontjainkat a Spring Security segítségével.

2. Tavaszi WebFlux keretrendszer

A Spring WebFlux belsőleg használja a Project Reactort és a kiadói megvalósításokat - Fényáram és Monó.

Az új keretrendszer két programozási modellt támogat:

  • Annotáció alapú reaktív komponensek
  • Funkcionális útválasztás és kezelés

Összpontosítunk az annotáción alapuló reaktív komponensekre, mivel a funkcionális stílust - az útválasztást és a kezelést egy másik oktatóanyagban - már feltártuk.

3. Függőségek

Kezdjük a spring-boot-starter-webflux függőség, amely behúzza az összes többi szükséges függőséget:

  • rugós csizma és rugós-bakancs-indító a Spring Boot alkalmazás alapbeállításához
  • tavaszi-webflux keretrendszer
  • reaktor-mag hogy szükségünk van reaktív áramokra és arra is reaktor-netty
 org.springframework.boot spring-boot-starter-webflux 2.2.6. KÖZLEMÉNY 

A legújabb tavaszi-boot-starter-webflux letölthető a Maven Central oldalról.

4. Reaktív REST alkalmazás

Most egy nagyon egyszerű reaktív REST-et építünk EmployeeManagement alkalmazás - a Spring WebFlux segítségével:

  • Egyszerű domain modellt fogunk használni - Munkavállaló egy valamivel id és a név terület
  • Felépítünk egy REST API-t a RestController publikálni Munkavállaló erőforrások egyetlen erőforrásként és gyűjteményként
  • Ügyfelet építünk Web Ügyfél hogy megszerezzék ugyanazt az erőforrást
  • A használatával létrehozunk egy biztonságos reaktív végpontot WebFlux és a Tavaszi Biztonság

5. Reaktív RestController

A Spring WebFlux ugyanúgy támogatja az annotáció alapú konfigurációkat, mint a Spring Web MVC keretrendszer.

Mindenekelőtt, a szerveren létrehozunk egy kommentált vezérlőt, amely közzéteszi a Munkavállaló forrás.

Készítsük el a jegyzetünket EmployeeController:

@RestController @RequestMapping ("/ alkalmazottak") nyilvános osztály EmployeeController {private final EmployeeRepository workerRepository; // kivitelező ...}

EmployeeRosory lehet bármilyen adattár, amely támogatja a nem blokkoló reaktív áramokat.

5.1. Egyetlen forrás

Hozzunk létre egy olyan végpontot a vezérlőnkben, amely egyetlen példányt tesz közzé Alkalmazotti erőforrás:

@GetMapping ("/ {id}") privát mono getEmployeeById (@PathVariable String id) {return workerRepository.findEmployeeById (id); }

Csomagolunk egy kislemezt Munkavállaló erőforrás a Monó mert legfeljebb egy alkalmazottat térünk vissza.

5.2. Gyűjtemény erőforrása

Adjunk hozzá egy végpontot is, amely közzéteszi az összes gyűjtési erőforrását Alkalmazottak:

@GetMapping private Flux getAllEmployees () {return workerRepository.findAllEmployees (); }

A gyűjtési erőforráshoz a Fényáram típusú Munkavállaló - mivel ez a kiadó 0..n elemek.

6. Reaktív webes kliens

Web Ügyfél az 5. tavasszal bevezetett, nem blokkoló kliens, amely támogatja a reaktív áramokat.

Tudjuk használni Web Ügyfél kliens létrehozása az adatok lekéréséhez a EmployeeController.

Hozzunk létre egy egyszerű EmployeeWebClient:

public class EmployeeWebClient {WebClient ügyfél = WebClient.create ("// localhost: 8080"); // ...}

Itt hoztuk létre a Web Ügyfél gyári módszerével teremt. Rámutat helyi gazda: 8080 így használhatunk vagy relatív URL-eket az ügyfélpéldány által kezdeményezett hívásokhoz.

6.1. Egyetlen forrás lekérése

Egyetlen típusú erőforrás lekérése Monó végponttól /munkavállalói azonosító}:

Mono workerMono = client.get () .uri ("/ alkalmazottak / {id}", "1"). Retrieve () .bodyToMono (Employee.class); workerMono.subscribe (System.out :: println);

6.2. Gyűjtemény-forrás lekérése

Hasonlóképpen egy típusú gyűjteményi erőforrás lekérésére Fényáram végponttól / alkalmazottak:

Flux workerFlux = client.get () .uri ("/ alkalmazottak") .retrieve () .bodyToFlux (Employee.class); workerFlux.subscribe (System.out :: println);

Van egy részletes cikkünk is a WebClient beállításáról és együttműködéséről.

7. Tavaszi WebFlux Security

Használhatjuk a Spring Security-t reaktív végpontjaink biztosításához.

Tegyük fel, hogy van egy új végpontunk EmployeeController. Ez a végpont frissül Munkavállaló részleteket és visszaküldi a frissítetteket Munkavállaló.

Mivel ez lehetővé teszi a felhasználók számára a meglévő alkalmazottak cseréjét, ezért ezt a végpontot korlátozni szeretnénk ADMIN csak szerepfelhasználók.

Vegyünk egy új módszert a mi EmployeeController:

@PostMapping ("/ update") privát Mono updateEmployee (@RequestBody Employee alkalmazott) {return workerRepository.updateEmployee (alkalmazott); }

Most, hogy korlátozzuk a hozzáférést ehhez a módszerhez, hozzunk létre SecurityConfig és definiáljon néhány útvonal-alapú szabályt, amelyek csak az ADMIN-felhasználókat engedélyezik:

@EnableWebFluxSecurity nyilvános osztály EmployeeWebSecurityConfig {// ... @Bean public SecurityWebFilterChain springSecurityFilterChain (ServerHttpSecurity http) {http.csrf (). Disable () .authorizeExchange () .pathMatchers.Path.Matchers (HttpMetate.PhttpMetate.html) ("ADMIN") .pathMatchers ("/ **"). AllowAll () .és () .httpBasic (); return http.build (); }}

Ez a konfiguráció korlátozza a végpont elérését / alkalmazottak / frissítés. Ezért csak a felhasználóknak van szerepük ADMIN képes lesz elérni ezt a végpontot és frissíteni egy létezőt Munkavállaló.

Végül az annotáció @EnableWebFluxSecurity hozzáadja a Spring Security WebFlux támogatást néhány alapértelmezett konfigurációval.

Van egy részletes cikkünk a Spring WebFlux biztonságának konfigurálásáról és kezeléséről is.

8. Következtetés

Ebben a cikkben azt vizsgáltuk, hogyan lehet reaktív web-összetevőket létrehozni és hogyan lehet velük dolgozni, amint azt a Spring WebFlux keretrendszer támogatja. Példaként egy kis Reactive REST alkalmazást építettünk.

Megtanultuk használni RestController és Web Ügyfél reaktív folyamok közzététele és fogyasztása.

Azt is megvizsgáltuk, hogyan lehet a Spring Security segítségével létrehozni egy biztonságos reaktív végpontot.

A reaktív kivételével RestController és Web Ügyfél, a WebFlux keret is támogatja a reaktív WebSocket és a megfelelő WebSocketClient a reaktív folyamok socket stílusú streamingjéhez.

Van egy részletes cikkünk, amely a Reactive WebSocket és az Spring 5 együttes használatával foglalkozik.

Végül az oktatóanyagban használt teljes forráskód elérhető a Githubon.