当前位置:首页 > 服务端 > Feign与Gateway

Feign与Gateway

2022年11月09日 10:25:56服务端7

Gateway的简介

        Gateway是SpringCloud中的API网关,提供鉴权和路由的功能,以前用户可以直接访问服务,而有了网关,就像有了保安一样,需要核实身份信息,才可以放入访问服务。

Gateway的工作机制

  1. 客户端发送请求给Gateway网关,网关将请求发送给处理器映射(HandlerMapping)

  2. 网关通过路由的匹配,将请求发送给Web处理器处理,请求就需要经过一系列过滤器

  3. 过滤器分为“pre"前置和”post"后置两种,前置过滤器实现鉴权作用,后置过滤实现性能统计或日志收集

  4. 通过过滤器就到达需要的服务

Geteway的路由 

Geteway路由规则

时间点后匹配

spring:
  cloud:
    gateway:
      routes:
        - id: after_route
          uri: https://example.org
          predicates:
            - After=2017-01-20T17:42:47.789-07:00[America/Denver]

时间点前匹配

spring:
  cloud:
    gateway:
      routes:
      - id: before_route
        uri: https://example.org
        predicates:
        - Before=2017-01-20T17:42:47.789-07:00[America/Denver]

远程地址匹配

spring:
  cloud:
    gateway:
      routes:
      - id: remoteaddr_route
        uri: https://example.org
        predicates:
        - RemoteAddr=192.168.1.1/24

使用注册中心时,uri以 lb: //开头(lb代表从注册中心获取服务),后面是需要转发到的服务名称

使用方法:

1)创建网关项目, 引入eureka-client和gateway依赖

2)编写配置

server:
  port: 9999
spring:
  application:
    name: gateway-service
  cloud:
    gateway:
      routes:
        - id: goods-service-route
          uri: lb://goods-service
          predicates:
            - Path=/goods/**
        - id: order-service-route
          uri: lb://order-service
          predicates:
            - Path=/order/**,/orders/**
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    serviceUrl:
      defaultZone: http://localhost:8888/eureka

Gareway的过滤器

从过滤器生命周期(影响时机点)的角度来说,主要有两个pre和post:

生命周期时机点 作用
pre 这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。
post 这种过滤器在路由到微服务以后执行。这种过滤器可以用来为响应添加标准的HTTPHeader、收集统计信息和指标、将响应从微服务发送给客户端等。

从过滤器类型的角度,Spring Cloud GateWay的过滤器分为GateWayFilter和GlobalFilter两种

过滤器 影响范围
GateWayFilter 应用到单个路由上
GlobalFilyer 应用到所有的路由上
/**
 * 自定义全局过滤器,用于用户权限验证
 */
@Slf4j
@Component
public class AuthenticationFilter implements GlobalFilter, Ordered {

    //过滤请求和响应
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        //获得请求和响应
        ServerHttpRequest request = exchange.getRequest();
        ServerHttpResponse response = exchange.getResponse();
        //获得请求参数 如果有token=123456 就表示登录
        String token = request.getQueryParams().getFirst("token");
        log.info("url==>"+request.getURI());
        log.info("token==>"+token);
        if(!"123456".equals(token)){
            //如果没有参数token=123456,拒绝访问
            response.setStatusCode(HttpStatus.UNAUTHORIZED);
            String msg = "Request Denied!!";
            DataBuffer wrap = response.bufferFactory().wrap(msg.getBytes());
            return response.writeWith(Mono.just(wrap));
        }
        //如果有就放行
        return chain.filter(exchange);
    }

    //返回过滤器顺序,越小越靠前
    @Override
    public int getOrder() {
        return 0;
    }
}

作者:爆爆啊
来源链接:https://blog.csdn.net/weixin_61195714/article/details/121959782

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/68720.html

标签: FeignGateway
分享给朋友:

“Feign与Gateway” 的相关文章

微服务bug之:openFeign远程调用返回类型转换异常

微服务bug之:openFeign远程调用返回类型转换异常

    楼主是在使用easyexcel导出的时候,获取数据出现这个错误,因为Spring底层是这样处理的使用LinkedhashMap来承接查询结果,导致转换异常 public List<NeedAllocationEnti...

gRPC+gRPC Gateway+swagger小记

gRPC+gRPC Gateway+swagger小记

gRPC+gRPC Gateway+swagger小记 前言 本文记录了grpc-gateway的简单使用。 定义proto 先来看看最常规的 syntax = "proto3"; package protos; service Greet...

java 面试题——feign

java 面试题——feign

作者:小十木 来源链接:https://blog.csdn.net/m0_37664223/article/details/106571572...

SpringBoot 整合 gateway

SpringBoot 整合 gateway

1.添加依赖 1.1 在springboot项目中注意 pom文件配置<parent>节点,否则nacos依赖会出问题 <parent> <groupId>org.springframework.boot</groupId&...

SpringCloud系列——Feign 服务调用

SpringCloud系列——Feign 服务调用

  前言   前面我们已经实现了服务的注册与发现(请戳:SpringCloud系列——Eureka 服务注册与发现),并且在注册中心注册了一个服务myspringboot,本文记录多个服务之间使用Feign调用。   Feign是一个声明性web服务客户端。它使编写web服...

springcloud-Feign基础使用

声明式REST客户端:Feign Feign是一个声明式的Web服务客户端。它使得Web服务客户端的写入更加方便。具有可插拔注解支持,包括Feign注解和JAX-RS注解。 Spring Cloud增加了对Spring MVC注释的支持,并且使用了在Spring Web中默...

SpringCloud + Consul服务注册中心 + gateway网关

  1  启动Consul 2  创建springcloud-consul项目及三个子模块        2.1 数据模块consul-producer      ...

跟我学SpringCloud | 第十二篇:Spring Cloud Gateway初探

跟我学SpringCloud | 第十二篇:Spring Cloud Gateway初探

SpringCloud系列教程 | 第十二篇:Spring Cloud Gateway初探 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如无特殊说明,本系列教程...

SpringCloud(三)-  OpenFeign简介及@FeignClient等注解的使用

SpringCloud(三)- OpenFeign简介及@FeignClient等注解的使用

《 心有多大,舞台就有多大 人得有—理想 》 OpenFeign简介及@FeignClient等注解的使用 唯能极于情,故能极于剑 有问题或错误请及时联系小编或关注小编公众号 "CodeCow",小编一定及时回复和改正,期待和大家一起学习交流 此...

关于本次【Unsatisfied dependency expressed through field 'iClientFeignEmployeeService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.oppo】

关于本次springboot项目上线遇到的问题归纳: 1.本地合适但是线上扫不到包,报错:【Unsatisfied dependency expressed through field 'iClientFeignEmployeeService'; nested exception...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。