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

SpringCloud網(wǎng)關(guān)Gateway功能實(shí)現(xiàn)

 更新時(shí)間:2025年09月19日 11:11:54   作者:咖啡Beans  
本文介紹SpringCloud網(wǎng)關(guān)Gateway功能實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

摘要

本文介紹微服務(wù)中網(wǎng)關(guān)的功能,并通過(guò)代碼展示如何實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)、路由轉(zhuǎn)發(fā)、統(tǒng)一認(rèn)證、日志監(jiān)控、跨域處理等功能。

認(rèn)識(shí)網(wǎng)關(guān)Gateway

網(wǎng)關(guān)Gateway是微服務(wù)項(xiàng)目的后端入口,負(fù)責(zé)請(qǐng)求路由、負(fù)載均衡、安全控制、協(xié)議轉(zhuǎn)換等功能,對(duì)整個(gè)微服務(wù)項(xiàng)目做出統(tǒng)一的請(qǐng)求前置處理功能。通過(guò)網(wǎng)關(guān)的轉(zhuǎn)發(fā),可避免直接暴露具體服務(wù)實(shí)例。  

功能

  • 路由轉(zhuǎn)發(fā):作為API網(wǎng)關(guān),核心功能之一是將請(qǐng)求路由到正確的后端服務(wù),可靈活地定義路由規(guī)則,將不同的請(qǐng)求路徑、主機(jī)或參數(shù)等映射到不同的服務(wù)。 
  • 過(guò)濾器:用于修改請(qǐng)求和響應(yīng),如添加請(qǐng)求頭、修改響應(yīng)體、限流、熔斷等。  
  • 服務(wù)發(fā)現(xiàn):與SpringCloud的服務(wù)發(fā)現(xiàn)組件nacos等集成,自動(dòng)發(fā)現(xiàn)和路由到后端服務(wù)實(shí)例。 
  • 統(tǒng)一認(rèn)證:進(jìn)行統(tǒng)一的身份認(rèn)證和授權(quán),保護(hù)后端服務(wù)不受未授權(quán)訪問(wèn)。
  • 監(jiān)控與日志:方便統(tǒng)一收集和處理請(qǐng)求日志,監(jiān)控系統(tǒng)運(yùn)行狀態(tài)。 
  • 負(fù)載均衡:與SpringCloudLoadBalancer集成,實(shí)現(xiàn)對(duì)后端服務(wù)的負(fù)載均衡,將請(qǐng)求分發(fā)到多個(gè)實(shí)例上。 
  • 限流與熔斷:支持Hystrix等組件,實(shí)現(xiàn)限流和熔斷功能,保護(hù)后端服務(wù)免受過(guò)載影響。 
  • 斷言功能:通過(guò)斷言工廠來(lái)實(shí)現(xiàn)對(duì)請(qǐng)求的靈活匹配,如根據(jù)請(qǐng)求路徑、方法、參數(shù)、頭信息等進(jìn)行路由決策。

代碼示例

導(dǎo)入依賴

<!--nacos 注冊(cè)中心 客戶端依賴-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--網(wǎng)關(guān)依賴 路由轉(zhuǎn)發(fā)+請(qǐng)求限流+身份認(rèn)證+負(fù)載均衡-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

1)路由轉(zhuǎn)發(fā)

配置application.yml

spring:
  application:
    name: springgateway-use   #服務(wù)名
servlet:
    context-path: /
cloud:
    nacos:
      server-addr: localhost:8848 #nacos服務(wù)端地址,默認(rèn)8848
      discovery:
        ephemeral: true   #默認(rèn)是臨時(shí)實(shí)例
    gateway:
      discovery:
        locator:
          enabled: true # 啟用服務(wù)發(fā)現(xiàn)
          lower-case-service-id: true # 服務(wù)名小寫(xiě)
      # 路由配置
      routes:
        -id: feign-producer-route #確保路由 ID 唯一,路徑匹配規(guī)則正確。
          uri: lb://feign-producer # 負(fù)載均衡到服務(wù)名 feign-producere
          predicates:
            - Path=/producer/** # 匹配路徑 /producer/**
          filters:
            - StripPrefix=1      # 過(guò)濾器,去掉路徑前綴 去除路徑前綴 /producer

配置類

package org.coffeebeans.config;

import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class GatewayConfig {
    //配置自定義的路由規(guī)則
    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
                .route("feign-producer", r -> r
                        .path("/producer/**") // 匹配 "/producer/**" 路徑的請(qǐng)求
                        .uri("lb://feign-producer")) // 轉(zhuǎn)發(fā)到名為 "feign-producer" 的微服務(wù)
                .build();
    }
}

2)過(guò)濾器 權(quán)限校驗(yàn)

package org.coffeebeans.filter;

import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

//統(tǒng)一認(rèn)證 自定義全局過(guò)濾器 應(yīng)用于所有請(qǐng)求 權(quán)限校驗(yàn)
@Component
public class GlobalAuthFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 檢查請(qǐng)求頭中的 authorization
        String authHeader = exchange.getRequest().getHeaders().getFirst("Authorization");
        if (authHeader == null || !authHeader.equals("admin")) {
            exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
            return exchange.getResponse().setComplete();
        }
        return chain.filter(exchange);
    }

    @Override
    public int getOrder() {
        return -1; // 設(shè)置過(guò)濾器的優(yōu)先級(jí)
    }
}

3)過(guò)濾器 日志監(jiān)控

package org.coffeebeans.filter;

import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

//日志過(guò)濾
@Slf4j
@Component
public class GlobalLogFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
       long startTime = System.currentTimeMillis(); // 記錄請(qǐng)求開(kāi)始時(shí)間
       String requestUri = exchange.getRequest().getURI().toString(); // 獲取請(qǐng)求地址
       // 替換響應(yīng)對(duì)象并繼續(xù)過(guò)濾器鏈
       return chain.filter(exchange.mutate().build())
             .doOnSuccess(aVoid -> {
                long endTime = System.currentTimeMillis();
                long duration = endTime - startTime;
                log.info("請(qǐng)求地址: {}, 耗時(shí): {}ms", requestUri, duration);
             });
    }

    @Override
    public int getOrder() {
        return Ordered.LOWEST_PRECEDENCE;
    }
}

緩存請(qǐng)求

package org.coffeebeans.filter;

import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.cloud.gateway.support.ServerWebExchangeUtils;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;


//緩存請(qǐng)求正文 避免Stream closed 錯(cuò)誤
@Component
public class GlobalCacheRequestFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        return ServerWebExchangeUtils.cacheRequestBodyAndRequest(exchange, (request) ->
          chain.filter(exchange.mutate().request(request).build())
       );
    }

    @Override
    public int getOrder() {
        return Ordered.HIGHEST_PRECEDENCE;
    }
}

4)過(guò)濾器 跨域處理

package org.coffeebeans.filter;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpMethod;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
import org.springframework.web.util.pattern.PathPatternParser;

//過(guò)濾器 統(tǒng)一cors跨域策略
@Configuration
public class GlobalCorsFilter {
    @Bean
    @Order(Ordered.HIGHEST_PRECEDENCE)
    public CorsWebFilter filter() {
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedMethod(HttpMethod.GET);  // 允許GET請(qǐng)求
        config.addAllowedMethod(HttpMethod.POST); // 允許POST請(qǐng)求
        config.addAllowedMethod(HttpMethod.OPTIONS); // 允許OPTIONS預(yù)檢請(qǐng)求
        config.addAllowedHeader(CorsConfiguration.ALL); // 允許所有請(qǐng)求頭
        config.addAllowedOriginPattern(CorsConfiguration.ALL); // 允許所有來(lái)源
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(newPathPatternParser());
        source.registerCorsConfiguration("/**", config); // 應(yīng)用到所有路徑
        return new CorsWebFilter(source);
    }
}

總結(jié)

以上我們了解了SpringCloudGateway的功能,并通過(guò)代碼展示了如何實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)、路由轉(zhuǎn)發(fā)、統(tǒng)一認(rèn)證、日志監(jiān)控、跨域處理的基本功能。

到此這篇關(guān)于SpringCloud網(wǎng)關(guān)Gateway功能實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SpringCloud網(wǎng)關(guān)Gateway內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中instanceof的基本語(yǔ)法與用法詳解

    Java中instanceof的基本語(yǔ)法與用法詳解

    這篇文章主要介紹了Java中instanceof的基本語(yǔ)法與用法的相關(guān)資料,instanceof是Java中用于檢查對(duì)象是否是某個(gè)類或接口的實(shí)例的二元運(yùn)算符,需要的朋友可以參考下
    2025-03-03
  • SpringBoot自定義對(duì)象參數(shù)實(shí)現(xiàn)自動(dòng)類型轉(zhuǎn)換與格式化

    SpringBoot自定義對(duì)象參數(shù)實(shí)現(xiàn)自動(dòng)類型轉(zhuǎn)換與格式化

    SpringBoot 通過(guò)自定義對(duì)象參數(shù),可以實(shí)現(xiàn)自動(dòng)類型轉(zhuǎn)換與格式化,并可以級(jí)聯(lián)封裝,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-09-09
  • 詳解Java分布式IP限流和防止惡意IP攻擊方案

    詳解Java分布式IP限流和防止惡意IP攻擊方案

    這篇文章主要介紹了詳解Java分布式IP限流和防止惡意IP攻擊方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Java AQS信號(hào)量Semaphore的使用

    Java AQS信號(hào)量Semaphore的使用

    Semaphore來(lái)自于JDK1.5的JUC包,直譯過(guò)來(lái)就是信號(hào)量,被作為一種多線程并發(fā)控制工具來(lái)使用。本文將詳解其原理與使用方法,感興趣的可以學(xué)習(xí)一下
    2023-02-02
  • JavaScript實(shí)現(xiàn)貪吃蛇游戲

    JavaScript實(shí)現(xiàn)貪吃蛇游戲

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • SpringBoot后端驗(yàn)證碼的實(shí)現(xiàn)示例

    SpringBoot后端驗(yàn)證碼的實(shí)現(xiàn)示例

    為了防止網(wǎng)站的用戶被通過(guò)密碼典爆破,引入驗(yàn)證碼的功能是十分有必要的,本文主要介紹了SpringBoot后端驗(yàn)證碼的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-08-08
  • Spring?MVC全局異常處理實(shí)戰(zhàn)詳細(xì)指南

    Spring?MVC全局異常處理實(shí)戰(zhàn)詳細(xì)指南

    在Spring MVC框架中統(tǒng)一異常處理是一項(xiàng)重要的功能,它能夠幫助開(kāi)發(fā)者集中管理并標(biāo)準(zhǔn)化系統(tǒng)中的異常處理流程,提高代碼的可讀性和可維護(hù)性,這篇文章主要介紹了Spring?MVC全局異常處理實(shí)戰(zhàn)的相關(guān)資料,需要的朋友可以參考下
    2026-02-02
  • Windows安裝Java17全過(guò)程

    Windows安裝Java17全過(guò)程

    這段文章詳細(xì)介紹了從Java8升級(jí)到Java17的全過(guò)程,包括下載、安裝、修改環(huán)境變量以及最后的驗(yàn)證步驟,涵蓋了從下載安裝到配置環(huán)境變量的全面指南
    2026-06-06
  • Spring Security整合CAS的示例代碼

    Spring Security整合CAS的示例代碼

    本篇文章主要介紹了Spring Security整合CAS的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Spring Boot之AOP配自定義注解的最佳實(shí)踐過(guò)程

    Spring Boot之AOP配自定義注解的最佳實(shí)踐過(guò)程

    這篇文章主要給大家介紹了關(guān)于Spring Boot之AOP配自定義注解的最佳實(shí)踐過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11

最新評(píng)論

南通市| 梓潼县| 修水县| 绥江县| 山阳县| 手游| 潼关县| 天台县| 和顺县| 屏南县| 左权县| 涞水县| 拉萨市| 汉阴县| 平舆县| 万安县| 沾化县| 兖州市| 汾阳市| 建水县| 德州市| 伊金霍洛旗| 全椒县| 历史| 茂名市| 横峰县| 青铜峡市| 岳普湖县| 聂拉木县| 灵璧县| 得荣县| 葫芦岛市| 罗山县| 英吉沙县| 梁山县| 塘沽区| 龙口市| 资中县| 神木县| 微博| 河间市|