当前位置: 代码网 > it编程>编程语言>Java > springcloud——统一网关Gateway服务的搭建过程

springcloud——统一网关Gateway服务的搭建过程

2024年08月06日 Java 我要评论
统一网关Gateway服务的搭建过程

第一步:创建新的module,引入springcloudgateway的依赖和nacos的服务发现依赖

 <!--网关依赖-->
       <dependency>
        <groupid>org.springframework.cloud</groupid>
        <artifactid>spring-cloud-starter-gateway</artifactid>
       </dependency>
        <!--nacos服务发现依赖-->
        <dependency>
            <groupid>com.alibaba.cloud</groupid>
            <artifactid>spring-cloud-starter-alibaba-nacos-discovery</artifactid>
        </dependency>

第二步:编写路由配置及nacos地址

server:
  port: 10010
spring:
  application:
    name: gatewayserver
  cloud:
    nacos:
      server-addr: localhost:8848
    gateway:
      routes:
        - id: user-service # 路由id,自定义,只要唯一即可
            # uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址
          uri: lb://userservice # 路由的目标地址 lb就是负载均衡,后面跟服务名称
          predicates: # 路由断言,也就是判断请求是否符合路由规则的条件
            - path=/user/** # 这个是按照路径匹配,只要以/user/开头就符合要求
        - id: order-service # 路由id,自定义,只要唯一即可
           # uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址
          uri: lb://orderservice # 路由的目标地址 lb就是负载均衡,后面跟服务名称
          predicates: # 路由断言,也就是判断请求是否符合路由规则的条件
            - path=/order/** # 这个是按照路径匹配,只要以/user/开头就符合要求

基本过程:

路由配置包括:

1.路由id:路由的唯一标示 路由目标

2.(uri):路由的目标地址,http代表固定地址,lb代表根据服务名负载均衡 路由断言

3.(predicates):判断路由的规则, 路由过滤器,路由断言,判断请求是否符合要求,符合则转发到路由目的地

4.(filters):对请求或响应做处理

路由断言工厂route predicate factory

 过滤器工厂 gatewayfilterfactory

 实现方式一:在gateway中修改application.yml文件,给服务的路由添加过滤器:

spring:
  cloud:
    gateway:
      routes: # 网关路由配置
        - id: user-service
          uri: lb://userservice          predicates:
            - path=/user/**
          filters: # 过滤器
            - addrequestheader=truth, itcast is freaking awesome! # 添加请求头

实现方式二:如果要对所有的路由都生效,则可以将过滤器工厂写到default下。格式如下:

spring:
  application:
    name: gateway # 服务名称
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos地址
    gateway:
      routes: # 网关路由配置
        - id: user-service 
          uri: lb://userservice  
          predicates: 
            - path=/user/** 
        - id: order-service
          uri: lb://orderservice
          predicates:
            - path=/order/**
      default-filters: # 默认过滤器,会对所有的路由请求都生效
        - addrequestheader=truth, itcast is freaking awesome! # 添加请求头

实现方式三:自定义类,实现globalfilter接口,添加@order注解:

@order(-1)
@component
public class authorizefilter implements globalfilter {
    @override
    public mono<void> filter(serverwebexchange exchange, gatewayfilterchain chain) {
        // 1.获取请求参数
        multivaluemap<string, string> params = exchange.getrequest().getqueryparams();
        // 2.获取authorization参数
        string auth = params.getfirst("authorization");
        // 3.校验
        if ("admin".equals(auth)) {
            // 放行
           return chain.filter(exchange);
        }
        // 4.拦截
        // 4.1.禁止访问
        exchange.getresponse().setstatuscode(httpstatus.forbidden);
        // 4.2.结束处理
        return exchange.getresponse().setcomplete();
    }
}

过滤器执行顺序

1.每一个过滤器都必须指定一个int类型的order值,order值越小,优先级越高,执行顺序越靠前。

2.globalfilter通过实现ordered接口,或者添加@order注解来指定order值,由我们自己指定

3. 路由过滤器和defaultfilter的order由spring指定,默认是按照声明顺序从1递增。

4.当过滤器的order值一样时,会按照 defaultfilter > 路由过滤器 > globalfilter的顺序执行。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com