Ú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.