Java 网关Gateway基本操作

2023年 10月 5日 93.7k 0

功能

  • 身份验证和权限校验
  • 服务路由,负载均衡
  • 请求限流
  • 网关搭建

    创建新module , 导入依赖

    
    
        com.alibaba.cloud
        spring-cloud-starter-alibaba-nacos-discovery
    
    
    
    
        org.springframework.cloud
        spring-cloud-starter-gateway
    
    

    image.png

    编写路由配置及nacos地址

    server:
      port: 10010
    spring:
      application:
        name: gateway
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848 # nacos地址
            cluster-name: sh
        gateway:
          routes:
            - id: user-service # 路由标识,必须唯一
              uri: lb://userservice #路由的目标地址
              predicates: #路由断言,判断请求是否符合规则
                - Path=/user/**
            - id: order-service
              uri: lb://orderservice
              predicates:
                - Path=/order/**
    

    image.png

    断言工厂

    image.png

    过滤器工厂

    image.png

    添加过滤器

    路由过滤器Filter

    添加请求头
    image.png

    image.png

    默认过滤器defauleFilter

    默认过滤器将会对所有路径的路由都生效

    image.png

    全局过滤器GlobalFilter

    现有需求:定义全局过滤器,拦截请求,判断请求参数是否符合条件:

  • 参数中是否含有authorization
  • authorization的值是否为admin
  •     import org.springframework.cloud.gateway.filter.GatewayFilterChain;
    import org.springframework.cloud.gateway.filter.GlobalFilter;
    import org.springframework.core.annotation.Order;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.server.reactive.ServerHttpRequest;
    import org.springframework.stereotype.Component;
    import org.springframework.util.MultiValueMap;
    import org.springframework.web.server.ServerWebExchange;
    import reactor.core.publisher.Mono;

    import java.lang.annotation.Annotation;

    // @Order(-1)
    @Component
    public class AuthorizeFilter implements GlobalFilter,Order {
    @Override
    public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    //获取请求参数
    ServerHttpRequest request = exchange.getRequest();
    MultiValueMap params = request.getQueryParams();
    //获取请求参数的authorization
    String auth = params.getFirst("authorization");
    // 判断参数是否等于admin
    if("admin".equals(auth)){
    //是,放行
    return chain.filter(exchange);
    }
    //设置状态码
    exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
    //否,拦截
    return exchange.getResponse().setComplete();

    }

    @Override
    public int value() {
    return -1;
    }

    @Override
    public Class

    相关文章

    JavaScript2024新功能:Object.groupBy、正则表达式v标志
    PHP trim 函数对多字节字符的使用和限制
    新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
    使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
    为React 19做准备:WordPress 6.6用户指南
    如何删除WordPress中的所有评论

    发布评论