其他分享
首页 > 其他分享> > gateway

gateway

作者:互联网

1.引入jar

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

2.属性配置,routes-> id,uri,predicates,filters

(1)id,指定路由唯一标识。

(2)uri,可以指定服务地址也可以指定ip:端口。

(3)predicates,断言有多种规则Path只是其中一种。

(4)filters,过滤器有多种规则。

server:
  port: 10010
spring:
  application:
    name: gateway
  cloud:
    nacos:
      server-addr: localhost:80
    gateway:
      routes:
        - id: user-service # 路由标示,必须唯一
          uri: lb://userservice # 路由的目标地址
          predicates: # 路由断言,判断请求是否符合规则
            - Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合
          #filters:
          #  - AddRequestHeader=X-Request-Foo, Bar
        - id: order-service
          uri: lb://orderservice
          predicates:
            - Path=/order/**
      default-filters:
        - AddRequestHeader=X-Request-Foo, haha

3.全局过滤器

(1)实现GlobalFilter接口,编写业务逻辑。

(2)实现Ordered接口设置过滤器顺序值越小越优先,也可以使用@Order(1)注解直接指定值。


@Order(1)
@Component
public class AuthorizeFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        //获取参数
        MultiValueMap<String, String> queryParams = exchange.getRequest().getQueryParams();
        //参数校验
        String auth = queryParams.getFirst("auth");
        if(auth != null && auth.equals("admin")){
            return chain.filter(exchange);
        }

        exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
        //异常返回
        return exchange.getResponse().setComplete();
    }

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

 


标签:exchange,auth,gateway,filters,id,cloud
来源: https://www.cnblogs.com/yjwfcs/p/16267022.html