springboot整合gateway实现网关功能的示例代码

 更新时间:2022年02月08日 15:06:13   作者:灰太狼_cxh  
本文主要介绍了springboot整合gateway实现网关功能的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

1.使用场景:

网关可提供请求路由与组合、协议转换、安全认证、服务鉴权、流量控制与日志监控等服务。可选的网关有不少,比如 Nginx、、Linkerd 、eureka、 Spring Cloud Gateway、consul等。

Spring Cloud Gateway 针对进来的请求做各种判断和处理,比如说判断请求的合法性、权限验证,请求地址改写,请求参数、头信息、cookie 信息的分析和改写,请求速率控制,日志留存等。而这些都可以方便的通过 Predicate 和 GatewayFilter 来组合实现。

2.代码实现

1创建gateway-service服务

引入依赖

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
            <version>3.0.4</version>
        </dependency>
        <!--服务注册/发现中心依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!--服务的配置中心依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        <!--fegin组件-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>3.0.2</version>
        </dependency>
        <!-- Feign Client for loadBalancing -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
            <version>3.0.2</version>
        </dependency>
        <!--客户端负载均衡loadbalancer-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>

yml配置

server:
  port: 8001

spring:
  application:
    name: gateway-service #服务名
  profiles:
    active: dev #环境设置
  cloud:
    gateway:
      routes:
        # 透传服务
        - id: gateway-client #设置路由id(理论上是可以随便写的)
          uri: lb://gateway-client  #设置路由的url lb://nacos服务注册名称
          predicates:
            - Path=/client/** #路径匹配规则
          filters:
            - StripPrefix=1
        - id: gateway-consumer
          uri: lb://gateway-consumer
          predicates:
            - Path=/consumer/**
          filters:
            - StripPrefix=1

跨域配置

@Configuration
public class CorsConfig {
    @Bean
    public CorsWebFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedMethod("*");
        config.addAllowedOrigin("*");
        config.addAllowedHeader("*");

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
        source.registerCorsConfiguration("/**", config);

        return new CorsWebFilter(source);
    }
}

2创建gateway-client服务

引入依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--服务注册-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>0.2.1.RELEASE</version>
        </dependency>
        <!--服务调用-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

yml配置

server:
  port: 8002

spring:
  application:
    name: gateway-client #服务名
  profiles:
    active: dev #环境设置
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 #nacos服务注册

控制层请求

@RestController
public class TestController {

    @RequestMapping("/index")
    public String index(){
        return "gateway-client";
    }

}

启动类

@SpringBootApplication
@EnableDiscoveryClient
public class GatewayClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(GatewayClientApplication.class, args);
    }

}

3.实现效果

采用nacos作为注册中心,启动nacos后再启动gateway-service, gateway-client项目

在nacos发现服务注册成功

在浏览器发起请求

​ ​http://localhost:8001/client/index​​

实际上网关把请求发送到gateway-client服务,返回结果

到此这篇关于springboot整合gateway实现网关功能的示例代码的文章就介绍到这了,更多相关springboot gateway网关 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java file.delete删除文件失败,Windows磁盘出现无法访问的文件问题

    Java file.delete删除文件失败,Windows磁盘出现无法访问的文件问题

    这篇文章主要介绍了Java file.delete删除文件失败,Windows磁盘出现无法访问的文件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Java中Redis存储String类型会有乱码的问题及解决方案

    Java中Redis存储String类型会有乱码的问题及解决方案

    在java中使用Redis存储String类型的数据时,会出现乱码,我写了一条存储key为name,值为虎哥的字符串,然后获取一下这个key为name的值,打印得到的值,下面通过实例代码介绍Java中Redis存储String类型会有乱码的问题及解决方案,一起看看吧
    2024-04-04
  • springboot的类加载器(org.springframework.boot.loader)过程详解

    springboot的类加载器(org.springframework.boot.loader)过程详解

    这篇文章主要介绍了springboot的类加载器(org.springframework.boot.loader),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Java CompletableFuture如何实现超时功能

    Java CompletableFuture如何实现超时功能

    这篇文章主要为大家介绍了实现超时功能的基本思路以及CompletableFuture(之后简称CF)是如何通过代码实现超时功能的,需要的小伙伴可以了解下
    2025-01-01
  • Hibernate持久化对象生命周期原理解析

    Hibernate持久化对象生命周期原理解析

    这篇文章主要介绍了Hibernate持久化对象生命周期原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 通过Java组合问题看透回溯法

    通过Java组合问题看透回溯法

    今天给大家分享一道LeetCode算法题,题目不是很困难,但是从这到简单的题目我们可以分析出回溯算法的几个核心要点,感兴趣的可以了解一下
    2022-09-09
  • IDEA如何修改项目名称出现中括号

    IDEA如何修改项目名称出现中括号

    当项目文件夹名称与model名称不一致时,IDEA会在项目名旁显示中括号以区分,修改项目名称时出现中括号问题,通常是因为IDE中model名与文件夹名不同步,解决方法是统一model名称和文件夹名称,可通过重构功能或项目结构设置完成,重命名操作应谨慎,以避免路径等引用错误
    2024-10-10
  • 关于druid连接池的使用详解

    关于druid连接池的使用详解

    文章介绍了Druid连接池的两种使用方式:直接在代码中配置和通过配置文件配置,同时,文章详细讲解了如何在Web项目中启用Druid的监控功能,包括配置web.xml文件、设置过滤器等步骤,最后,文章还提到了Druid提供的加密解密工具,使数据库密码更安全
    2025-02-02
  • Quarkus集成open api接口使用swagger ui展示

    Quarkus集成open api接口使用swagger ui展示

    这篇文章主要为大家介绍了Quarkus集成open api接口使用swagger ui的展示示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-02-02
  • Java求s=a+aa+aaa+aaaa+aa...a 5个数相加的值

    Java求s=a+aa+aaa+aaaa+aa...a 5个数相加的值

    求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制
    2017-02-02

最新评论