Gateway网关快速入门

前言

Gateway网关是通过断言(Predicate)对前端请求进行管理的,把前端的各个请求路由到对应的服务,以及拦截器(Filter)对恶意请求进行拦截的东西。网关作用就是把各个服务对外提供的API汇聚起来,让外界看起来是一个统一的接口。同时也可在网关中提供额外的功能。总结:网关就是所有项目的一个统一入口。

1、Gateway快速入门

1.1引入Gateway相关依赖

#因为Gateway也是一个微服务,也需要注册到nacos上。
       <dependency>
          <groupId>com.alibaba.cloudgroupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
        dependency>
        
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-gatewayartifactId>
        dependency>

1.2配置yml文件(springboot整合大多数中间件的套路)

server:
  port: 4396

spring:
  application:
    name: gateway-service #服务名称
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #nacons服务地址
    gateway:
      routes:
        - id: position-service-route #路由id
          uri: lb://position-service #路由目标(路由到那个服务)
          predicates:
            - Path=/position/** #路由断言

        - id: department-service-route
          uri: lb://department-service
          predicates:
            - Path=/department/**

1.3自定义过滤器

@Slf4j
@Component
public class MyGlobalFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        //获得请求和响应对象
        ServerHttpRequest request = exchange.getRequest();
        ServerHttpResponse response = exchange.getResponse();
        //获得请求参数
        String token = request.getQueryParams().getFirst("token");
        if ("123".equals(token)) {
            //放行
            return chain.filter(exchange);
        }else{
            //拦截
            response.setStatusCode(HttpStatus.UNAUTHORIZED);
            DataBuffer wrap = response.bufferFactory().wrap("抱歉!您暂无访问权限,请联系管理员。".getBytes(StandardCharsets.UTF_8));
            return response.writeWith(Mono.just(wrap));
        }
    }

    @Override
    public int getOrder() {
        return 0;
    }
}

2、接口测试

Gateway网关快速入门_第1张图片Gateway网关快速入门_第2张图片

这里有三个服务,部门、网关、职位服务,部门服务和职务服务都有相应接口,职务服务可以通过openFeign远程调用部门服务。
用postman调用网关接口,符合条件,网关会帮我们路由到对应的断言服务。
Gateway网关快速入门_第3张图片由于我们之前设置过网关过滤器,请求中必须携带token,值为123。

Gateway网关快速入门_第4张图片

你可能感兴趣的:(SpringCloud,gateway,java,spring,boot)