gateway服务网关

gateway服务网关

gateway相当于所有请求的必经之路,客户端请求通过gateway后由定义的路由、断言、过滤器进行验证后转发,只有同时符合条件才给予转发。常用的功能包括路由转发,权限校验,限流。

gateway核心概念

路由(route):路由是网关中最基础的一部分,路由包括一个id,url,一组断言工厂,一组filter组成。

断言(predicates):断言是由开发者去定义匹配规则。

过滤器(filter):Gateway中的filter分为Gateway Filter和Global Filter。Filter 可以对请求和响应进行处理。

例如:

spring:
  cloud:
    gateway:
      routes:
        - id: payment_login
          uri: lb://CLOUD-PAYMENT-SERVICE
          predicates:
            - After=2018-01-20T06:06:06+08:00[Asia/Shanghai]
            - Path=/login/**
          filters:
            - PrefixPath=/sent/user
gateway构建步骤
  1. 加maven依赖,不需要加web依赖否则会报错。

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    
  2. 写yml文件路由规则

    server:
      port: 9527
    
    spring:
      application:
        name: cloud-gateway
      cloud:
        gateway:
          discovery:
            locator:
              enabled: true
          routes:
            - id: payment_login
              uri: lb://CLOUD-PAYMENT-SERVICE
              predicates:
                - After=2018-01-20T06:06:06+08:00[Asia/Shanghai]
                - Path=/login/**
              filters:
                - PrefixPath=/sent/user
    eureka:
      client:
        register-with-eureka: true
        fetch-registry: true
        service-url:
          defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eurek
    
全局过滤器

无需另外配置,对所有路由生效。

@Component
@Slf4j
public class PaymentGatewayFilter implements GlobalFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        String username  = exchange.getRequest().getQueryParams().getFirst("username");
        if (!"admin".equals(username)){
            exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
            log.info("非法闯入"+ new Date().toString());
            return exchange.getResponse().setComplete();
        }
        log.info("登录时间"+ new Date().toString());
        return chain.filter(exchange);
    }

    /**
     * 加载顺序,越小越先加载
     * @return
     */
    @Override
    public int getOrder() {
        return 0;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值