栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Feign与Gateway

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Feign与Gateway

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
@Slf4j
@Component
public class AuthenticationFilter implements GlobalFilter, Ordered {

    //过滤请求和响应
    @Override
    public Mono 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;
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/666835.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号