Guide til Spring 5 WebFlux

1. Oversigt

Spring WebFlux er en del af Spring 5 og leverer reaktiv programmeringsstøtte til webapplikationer.

I denne vejledning opretter vi en lille reaktiv REST-applikation ved hjælp af de reaktive webkomponenter RestController og Webklient.

Vi vil også se på, hvordan vi kan sikre vores reaktive slutpunkter ved hjælp af Spring Security.

2. Forår WebFlux Framework

Spring WebFlux bruger internt Project Reactor og dets udgiverimplementeringer - Strøm og Mono.

Den nye ramme understøtter to programmeringsmodeller:

  • Annotationsbaserede reaktive komponenter
  • Funktionel routing og håndtering

Vi fokuserer på de annoteringsbaserede reaktive komponenter, da vi allerede har udforsket den funktionelle stil - routing og håndtering i en anden tutorial.

3. Afhængigheder

Lad os starte med spring-boot-starter-webflux afhængighed, der trækker alle andre krævede afhængigheder ind:

  • spring-boot og spring-boot-starter til grundlæggende Spring Boot-applikationsopsætning
  • fjeder-webstrøm ramme
  • reaktorkerne at vi har brug for reaktive strømme og også reaktor-netty
 org.springframework.boot spring-boot-starter-webflux 2.2.6.RELEASE 

Den seneste spring-boot-starter-webflux kan downloades fra Maven Central.

4. Reaktiv REST-applikation

Vi bygger nu en meget enkel reaktiv REST Medarbejderledelse applikation - ved hjælp af Spring WebFlux:

  • Vi bruger en simpel domænemodel - Medarbejder med en id og en navn Mark
  • Vi bygger en REST API med en RestController at publisere Medarbejder ressourcer som en enkelt ressource og som en samling
  • Vi bygger en klient med Webklient for at hente den samme ressource
  • Vi opretter et sikret reaktivt slutpunkt ved hjælp af WebFlux og forårssikkerhed

5. Reaktiv RestController

Spring WebFlux understøtter annoteringsbaserede konfigurationer på samme måde som Spring Web MVC framework.

Til at starte med, på serveren opretter vi en kommenteret controller, der udgiver en reaktiv strøm af Medarbejder ressource.

Lad os oprette vores kommenterede Medarbejderkontrol:

@RestController @RequestMapping ("/ ansatte") offentlig klasse EmployeeController {privat endelig EmployeeRepository medarbejderRepository; // konstruktør ...}

Medarbejderopbevaring kan være et hvilket som helst datalager, der understøtter ikke-blokerende reaktive strømme.

5.1. Enkelt ressource

Lad os oprette et slutpunkt i vores controller, der udgiver en enkelt Medarbejderressource:

@GetMapping ("/ {id}") privat Mono getEmployeeById (@PathVariable String id) {return medarbejderRepository.findEmployeeById (id); }

Vi pakker en enkelt Medarbejder ressource i en Mono fordi vi højst returnerer en medarbejder.

5.2. Samlingsressource

Lad os også tilføje et slutpunkt, der offentliggør samlingsressourcen for alle Medarbejdere:

@GetMapping privat Flux getAllEmployees () {return medarbejderRepository.findAllEmployees (); }

Til indsamlingsressourcen bruger vi en Strøm af typen Medarbejder - da det er udgiveren for 0..n-elementer.

6. Reaktiv Webklient

Webklient introduceret i Spring 5 er en ikke-blokerende klient med support til reaktive streams.

Vi kan bruge Webklient for at oprette en klient til at hente data fra de slutpunkter, der leveres af Medarbejderkontrol.

Lad os oprette en simpel MedarbejderWebClient:

offentlig klasse EmployeeWebClient {WebClient-klient = WebClient.create ("// localhost: 8080"); // ...}

Her har vi oprettet en Webklient ved hjælp af fabriksmetoden skab. Det peger på lokal vært: 8080 så vi kan bruge eller relative URL'er til opkald foretaget af denne klientinstans.

6.1. Henter en enkelt ressource

At hente en enkelt type ressource Mono fra slutpunkt /Medarbejder-ID}:

Mono medarbejderMono = client.get () .uri ("/ medarbejdere / {id}", "1") .hent () .bodyToMono (Medarbejder.klasse); medarbejderMono.subscribe (System.out :: println);

6.2. Henter en samlingsressource

Tilsvarende for at hente en samlingsressource af typen Strøm fra slutpunkt / medarbejdere:

Flux medarbejderFlux = client.get () .uri ("/ medarbejdere") .hent () .bodyToFlux (medarbejder.klasse); medarbejderFlux.subscribe (System.out :: println);

Vi har også en detaljeret artikel om opsætning og arbejde med WebClient.

7. Forår WebFlux-sikkerhed

Vi kan bruge Spring Security til at sikre vores reaktive slutpunkter.

Lad os antage, at vi har et nyt slutpunkt i vores Medarbejderkontrol. Dette slutpunkt opdateres Medarbejder detaljer og sender det opdaterede tilbage Medarbejder.

Da dette giver brugerne mulighed for at ændre eksisterende medarbejdere, vil vi begrænse dette slutpunkt til ADMIN kun rollebrugere.

Lad os tilføje en ny metode til vores Medarbejderkontrol:

@PostMapping ("/ opdatering") privat mono-opdateringMedarbejder (@RequestBody medarbejdermedarbejder) {returner medarbejderRepository.update }

Lad os nu oprette for at begrænse adgangen til denne metode Sikkerhedskonfig og definer nogle sti-baserede regler, der kun tillader ADMIN-brugere:

@EnableWebFluxSecurity offentlig klasse EmployeeWebSecurityConfig {// ... @Bean public SecurityWebFilterChain springSecurityFilterChain (ServerHttpSecurity http) {http.csrf (). Disable () .authorizeExchange () .pathMatchers (HttpMethod.POST, /). ("ADMIN") .pathMatchers ("/ **"). PermitAll () .og () .httpBasic (); returner http.build (); }}

Denne konfiguration begrænser adgangen til slutpunktet / medarbejdere / opdatering. Derfor er det kun brugere, der har en rolle ADMIN vil kunne få adgang til dette slutpunkt og opdatere et eksisterende Medarbejder.

Endelig kommentaren @EnableWebFluxSecurity tilføjer Spring Security WebFlux support med nogle standardkonfigurationer.

Vi har også en detaljeret artikel om konfiguration og arbejde med Spring WebFlux-sikkerhed.

8. Konklusion

I denne artikel har vi undersøgt, hvordan man opretter og arbejder med reaktive webkomponenter som understøttet af Spring WebFlux-rammen. Som et eksempel har vi bygget en lille Reactive REST-applikation.

Vi lærte at bruge RestController og Webklient at udgive og forbruge reaktive streams.

Vi undersøgte også, hvordan man opretter et sikret reaktivt slutpunkt ved hjælp af Spring Security.

Andet end reaktivt RestController og Webklient, det WebFlux framework understøtter også reaktive WebSocket og det tilsvarende WebSocketClient til stikkontakt-streaming af reaktive streams.

Vi har en detaljeret artikel, der fokuserer på at arbejde med Reactive WebSocket med Spring 5.

Endelig er den komplette kildekode, der bruges i denne vejledning, tilgængelig på Github.


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