最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring WebFlux的使用指南

 更新時(shí)間:2021年05月06日 11:56:45   作者:老K的JAVA博客  
這篇文章主要介紹了Spring WebFlux的使用指南,幫助大家更好的理解和學(xué)習(xí)使用Spring框架,感興趣的朋友可以了解下

Spring WebFlux是spring5的一部分,它為web應(yīng)用程序提供反應(yīng)式編程支持。

在本教程中,我們將使用RestController和WebClient創(chuàng)建一個(gè)小型響應(yīng)式REST應(yīng)用程序。

我們還將研究如何使用Spring安全保護(hù)我們的反應(yīng)端點(diǎn)。

Spring-WebFlux框架

Spring WebFlux在內(nèi)部使用Project Reactor及其發(fā)布者實(shí)現(xiàn)Flux和Mono。

新框架支持兩種編程模型:

  • 基于注釋的反應(yīng)元件
  • 功能路由和處理

依賴項(xiàng)

讓我們從spring boot starter webflux依賴項(xiàng)開始,它包含所有其他必需的依賴項(xiàng):

  • spring boot和spring boot starter,用于基本的spring boot應(yīng)用程序設(shè)置
  • spring-webflux框架
  • reactor-core我們需要的反應(yīng)流,也需要reactor-netty
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
    <version>2.2.6.RELEASE</version>
</dependency>

響應(yīng)式應(yīng)用

我們現(xiàn)在將使用Spring WebFlux構(gòu)建一個(gè)非常簡單的REST EmployeeManagement應(yīng)用程序:

  • 我們將使用一個(gè)簡單的域模型-帶有id和name字段的Employee
  • 我們將使用RestController構(gòu)建restapi,以將員工資源作為單個(gè)資源和集合發(fā)布
  • 我們將使用WebClient構(gòu)建一個(gè)客戶端來檢索相同的資源
  • 我們將使用WebFlux和Spring Security創(chuàng)建一個(gè)安全的被動(dòng)端點(diǎn)

響應(yīng)式RestController

springwebflux支持基于注釋的配置,方式與springwebmvc框架相同。

首先,在服務(wù)器上,我們創(chuàng)建一個(gè)帶注釋的控制器,它發(fā)布員工資源的反應(yīng)流。

讓我們創(chuàng)建帶注釋的EmployeeController

@RestController
@RequestMapping("/employees")
public class EmployeeController {

    private final EmployeeRepository employeeRepository;
    
    // constructor...
}

EmployeeRepository可以是任何支持非阻塞反應(yīng)流的數(shù)據(jù)存儲(chǔ)庫。

單一資源

讓我們在控制器中創(chuàng)建一個(gè)端點(diǎn),用于發(fā)布單個(gè)員工資源:

@GetMapping("/{id}")
private Mono<Employee> getEmployeeById(@PathVariable String id) {
    return employeeRepository.findEmployeeById(id);
}

我們在Mono中包裝一個(gè)Employee資源,因?yàn)槲覀冏疃喾祷匾粋€(gè)Employee。

集合資源

我們還要添加一個(gè)端點(diǎn)來發(fā)布所有雇員的集合資源:

@GetMapping
private Flux<Employee> getAllEmployees() {
    return employeeRepository.findAllEmployees();
}

對于集合資源,我們使用類型為Employee的流量,因?yàn)樗?..n元素的發(fā)布者。

反應(yīng)式Web客戶端

Spring5中引入的WebClient是一個(gè)支持反應(yīng)流的非阻塞客戶端。

我們可以使用WebClient創(chuàng)建一個(gè)客戶端,從EmployeeController提供的端點(diǎn)檢索數(shù)據(jù)。

讓我們創(chuàng)建一個(gè)簡單的EmployeeWebClient:

public class EmployeeWebClient {

    WebClient client = WebClient.create("http://localhost:8080");

    // ...
}

在這里,我們使用工廠方法create創(chuàng)建了一個(gè)WebClient。它會(huì)指向localhost:8080,所以我們可以使用或相對的URL來調(diào)用這個(gè)客戶端實(shí)例。

檢索單個(gè)資源

要從endpoint/employee/{id}檢索Mono類型的單個(gè)資源,請執(zhí)行以下操作:

Mono<Employee> employeeMono = client.get()
  .uri("/employees/{id}", "1")
  .retrieve()
  .bodyToMono(Employee.class);

employeeMono.subscribe(System.out::println);

檢索集合資源

類似地,要從endpoint/employees檢索Flux類型的集合資源,請執(zhí)行以下操作:

Flux<Employee> employeeFlux = client.get()
  .uri("/employees")
  .retrieve()
  .bodyToFlux(Employee.class);
        
employeeFlux.subscribe(System.out::println);

Spring WebFlux安全性

我們可以使用Spring Security來保護(hù)我們的反應(yīng)端點(diǎn)。

假設(shè)我們在EmployeeController中有一個(gè)新的端點(diǎn)。此端點(diǎn)更新員工詳細(xì)信息并發(fā)回更新的員工。

由于這允許用戶更改現(xiàn)有員工,因此我們希望僅將此端點(diǎn)限制為管理員角色用戶。

讓我們?yōu)镋mployeeController添加一個(gè)新方法:

@PostMapping("/update")
private Mono<Employee> updateEmployee(@RequestBody Employee employee) {
    return employeeRepository.updateEmployee(employee);
}

現(xiàn)在,為了限制對該方法的訪問,讓我們創(chuàng)建SecurityConfig并定義一些基于路徑的規(guī)則以僅允許管理員用戶:

@EnableWebFluxSecurity
public class EmployeeWebSecurityConfig {

    // ...

    @Bean
    public SecurityWebFilterChain springSecurityFilterChain(
      ServerHttpSecurity http) {
        http.csrf().disable()
          .authorizeExchange()
          .pathMatchers(HttpMethod.POST, "/employees/update").hasRole("ADMIN")
          .pathMatchers("/**").permitAll()
          .and()
          .httpBasic();
        return http.build();
    }
}

此配置將限制對/employees/update的訪問。因此,只有具有ADMIN角色的用戶才能訪問此端點(diǎn)并更新現(xiàn)有員工。

最后,注解@EnableWebFluxSecurity添加了一些默認(rèn)配置的Spring-Security-WebFlux支持。

結(jié)論

在本文中,我們探討了如何創(chuàng)建和使用springwebflux框架支持的反應(yīng)式web組件。例如,我們構(gòu)建了一個(gè)小型的REST應(yīng)用程序。

除了Reactive RestController和WebClient之外,WebFlux框架還支持Reactive WebSocket和對應(yīng)的WebSocketClient,以進(jìn)行套接字樣式的Reactive流。

最后,在Github上提供了本文中使用的完整源代碼:https://github.com/eugenp/tutorials/tree/master/spring-5-reactive-security

以上就是Spring WebFlux的使用指南的詳細(xì)內(nèi)容,更多關(guān)于Spring WebFlux的使用的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java常見數(shù)據(jù)結(jié)構(gòu)面試題(帶答案)

    Java常見數(shù)據(jù)結(jié)構(gòu)面試題(帶答案)

    這篇文章主要介紹了Java常見數(shù)據(jù)結(jié)構(gòu)面試題,帶有答案及解釋,希望對廣大的程序愛好者有所幫助,同時(shí)祝大家有一個(gè)好成績,需要的朋友可以參考下。
    2017-09-09
  • Spring Boot實(shí)現(xiàn)STOMP協(xié)議的WebSocket的方法步驟

    Spring Boot實(shí)現(xiàn)STOMP協(xié)議的WebSocket的方法步驟

    這篇文章主要介紹了Spring Boot實(shí)現(xiàn)STOMP協(xié)議的WebSocket的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-05-05
  • SiteMesh如何結(jié)合Freemarker及velocity使用

    SiteMesh如何結(jié)合Freemarker及velocity使用

    這篇文章主要介紹了SiteMesh如何結(jié)合Freemarker及velocity使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • SpringBoot項(xiàng)目更換項(xiàng)目名稱的實(shí)現(xiàn)

    SpringBoot項(xiàng)目更換項(xiàng)目名稱的實(shí)現(xiàn)

    本文主要介紹了SpringBoot項(xiàng)目更換項(xiàng)目名稱,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • java讀取csv文件內(nèi)容示例代碼

    java讀取csv文件內(nèi)容示例代碼

    這篇文章主要介紹了java讀取csv文件內(nèi)容的示例,大家參考使用
    2013-12-12
  • ChatGpt都使用的Java BPE分詞算法不要了解一下

    ChatGpt都使用的Java BPE分詞算法不要了解一下

    Byte Pair Encoding(BPE)是一種文本壓縮算法,它通常用于自然語言處理領(lǐng)域中的分詞、詞匯表構(gòu)建等任務(wù),本文將對 BPE 算法進(jìn)行全面、詳細(xì)的講解,并提供 Java 相關(guān)的代碼示例,希望對大家有所幫助
    2023-06-06
  • 關(guān)于Java中靜態(tài)代碼塊的執(zhí)行淺析

    關(guān)于Java中靜態(tài)代碼塊的執(zhí)行淺析

    這篇文章主要給大家介紹了關(guān)于Java中靜態(tài)代碼塊執(zhí)行的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • java不解壓直接讀取壓縮包中文件的實(shí)現(xiàn)方法

    java不解壓直接讀取壓縮包中文件的實(shí)現(xiàn)方法

    這篇文章主要介紹了java不解壓直接讀取壓縮包中文件的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java?使用geotools讀取tiff數(shù)據(jù)的示例代碼

    Java?使用geotools讀取tiff數(shù)據(jù)的示例代碼

    這篇文章主要介紹了Java?通過geotools讀取tiff,一般對于tiff數(shù)據(jù)的讀取,都會(huì)借助于gdal,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • spring boot整合mybatis利用Mysql實(shí)現(xiàn)主鍵UUID的方法

    spring boot整合mybatis利用Mysql實(shí)現(xiàn)主鍵UUID的方法

    這篇文章主要給大家介紹了關(guān)于spring boot整合mybatis利用Mysql實(shí)現(xiàn)主鍵UUID的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03

最新評論

吴江市| 东山县| 荔浦县| 河源市| 房产| 沧州市| 娱乐| 商洛市| 原平市| 晋宁县| 阜南县| 客服| 隆德县| 湘西| 曲松县| 东莞市| 宁夏| 耿马| 克拉玛依市| 巨鹿县| 纳雍县| 辽宁省| 遵义县| 苏尼特右旗| 开封市| 错那县| 安新县| 上饶市| 镇安县| 滦平县| 大庆市| 上高县| 贡觉县| 阿尔山市| 冷水江市| 禄丰县| 盐源县| 酒泉市| 芜湖县| 广水市| 信丰县|