SpringCloud Gateway笔记整理

news/2024/9/19 14:08:23 标签: spring cloud, gateway, 笔记
  1. actuator配置, 访问http://localhost:9999/actuator/gateway/routes查看路由信息
    management.endpoint.gateway.enabled=true
    management.endpoints.web.exposure.include=gateway
    
  2. logger配置
    logging.level.org.springframework.cloud.gateway=trace
    logging.level.org.springframework.http.server.reactive=debug
    logging.level.org.springframework.web.reactive=debug
    logging.level.reactor.ipc.netty=debug
    
  3. 路由配置
    # 访问http://localhost:9999/jd时,会转发到https://www.jd.com/
    spring.cloud.gateway.routes[0].id=jd_route
    spring.cloud.gateway.routes[0].uri=https://www.jd.com/
    spring.cloud.gateway.routes[0].predicates[0]=Path=/jd
    

自定义GatewayFilter

  1. 实现GatewayFilter接口
    @Component
    public class CustomGatewayFilterFactory
            extends AbstractNameValueGatewayFilterFactory implements Ordered {
        private static final String COUNT_START_TIME = "count_start_time" ;
        @Override
        public GatewayFilter apply(NameValueConfig config) {
            return (exchange, chain) -> {
                exchange.getAttributes().put(COUNT_START_TIME, System.currentTimeMillis()) ;
                return chain.filter(exchange).then(Mono.fromRunnable(() ->{
                    Long startTime = exchange.getAttribute(COUNT_START_TIME);
                    if (startTime != null){
                        long endTime = System.currentTimeMillis() - startTime ;
                        log.info(exchange.getRequest().getURI().getRawPath() + ": " + endTime + "ms");
                    }
                }));
            };
        }
        @Override
        public int getOrder() {
            return Ordered.LOWEST_PRECEDENCE ;
        }
    }
    
  2. 配置过滤器
    spring.cloud.gateway.routes[0].id=jd_route
    spring.cloud.gateway.routes[0].uri=https://www.jd.com/
    spring.cloud.gateway.routes[0].predicates[0]=Path=/jd
    spring.cloud.gateway.routes[0].filters[0]=Custom=name,test
    

自定义GlobalFilter

  1. 实现GlobalFilter接口
    @Component
    public class AuthSignatureFilter implements GlobalFilter, Ordered {
        @Override
        public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
            String token = exchange.getRequest().getQueryParams().getFirst("token");
            if (StringUtils.isBlank(token)){
                // 如果token为空,则返回401
                exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
                return exchange.getResponse().setComplete();
            }
            return chain.filter(exchange);
        }
        @Override
        public int getOrder() {
            return -400;
        }
    }
    
  2. 访问:http://localhost:9999/jd?token=123正常跳转到https://www.jd.com/

其他

  1. 执行流程
    HttpWebHandlerAdapter
    DispatcherHandler
    RoutePredicateHandlerMapping
    FilteringWebHandler
    
  2. 内置10个global 过滤器
    RemoveCachedBodyFilter
    AdaptCachedBodyGlobalFilter
    NettyWriteResponseFilter
    ForwardPathFilter
    RouteToRequestUrlFilter
    ReactiveLoadBalancerClientFilter
    LoadBalancerServiceInstanceCookieFilter
    WebsocketRoutingFilter
    NettyRoutingFilter
    ForwardRoutingFilter
    

http://www.niftyadmin.cn/n/5663006.html

相关文章

Git提交类型

说明&#xff1a;Git提交类型指的是代码commit时&#xff0c;写在comment前面的标志&#xff0c;表示此次commit的提交类型&#xff0c;如下&#xff1a; Git提交类型 常见的Git提交类型有&#xff1a; feat&#xff1a;新特性、新功能或优化&#xff1b; fix&#xff1a;修复…

算法题总结(一)——二分查找专题

二分查找 我们二分查找的本质就是每次能够通过中间值来进行分割&#xff0c;能够比较判断&#xff0c;查找到或者接近需要的数据&#xff0c;然后把一部分的数据丢弃掉。 原题 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &…

修改状态的标准模版

前端是用post提交&#xff0c;json格式然后的话里面是包含一个id信息的&#xff0c;status的话是包含在路径上 四个都是这样的接口 首先继续controller直接接受两个参数&#xff0c;一个status以路径的PathVariable Integer status, id以RequestParam Long id 然后传递给servic…

【数据结构与算法 | 灵神题单 | 自顶向下DFS篇】力扣1022,623

1. 力扣1022&#xff1a;从根到叶的二进制之和 1.1 题目&#xff1a; 给出一棵二叉树&#xff0c;其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。 例如&#xff0c;如果路径为 0 -> 1 -> 1 -> 0 -> 1&#xff0c;那…

雷池+frp 批量设置proxy_protocol实现真实IP透传

需求背景 在内网环境中部署了safeline安全防护系统&#xff0c;希望通过frp实现外网对内部web网站服务的访问&#xff0c;并确保safeline能够记录真实的攻击IP来源。由于safeline和frp都部署在同一台服务器上&#xff0c;我们需要通过配置来实现这一需求。 frp客户端配置 对…

Windows+Ubuntu双系统下时钟设置

Ubuntu默认把系统时间&#xff08;硬件时钟&#xff09;设置为UTC时间&#xff0c;并根据本地时区和夏令时设置自动调整本地时间&#xff0c;这是一种很合理很优雅的处理硬件时钟和本地时钟的模式。而Windows系统是默认情况下把系统时间设置为本地时间&#xff0c;历来独霸电脑…

【iOS】push和pop、present和dismiss

目录 前言push和poppushpop present和dismisspresentdismiss实现模态对话框代码示例 区别总结 前言 push 和 present 是两种用于导航和切换视图控制器&#xff08;ViewController&#xff09;的常用方法&#xff0c;push与present都可以推出新的界面&#xff0c;present与dismi…

Java数据存储结构——平衡二叉树

文章目录 22.1.3 平衡二叉树22.1.3.1 LL22.1.3.2 LR22.1.3.3 RR22.1.3.4 RL 22.1.3 平衡二叉树 平衡二叉树的特点&#xff1a; 二叉树左右两个子树的高度差不超过1任意节点的左右两个子树都是一颗平衡二叉树 在原来的平衡二叉树中&#xff0c;新增数据会破坏平衡性&#xff…