springcloud3 GateWay的断言和filter操作

Posted 健康平安的活着

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springcloud3 GateWay的断言和filter操作相关的知识,希望对你有一定的参考价值。

一  gateway的断言操作

1.1 断言操作

1.在配置文件配置如下:意思为:匹配到path设置的路径 and 在after设置的时间后执行。

 2.启动9001,9002,9003,9004,9007 如下

 3.访问,此刻时间还没有到达设置的时间,进行访问

 稍等一会,满足在after设定的时间之后,再次访问

 1.2 其他情况的配置

1.配置cookie   - Cookie=username,zzyy
2.配置头部  - Header=X-Request-Id, \\d+  # 请求头要有X-Request-Id属性并且值为整数的正则表达式

......

二   gateway的filter

2.1 自定义filter对应

案例原理:  自定义fliter 实现对请求参数必须含有uname参数,否则进行拦截掉。

2.2 自定义filter的拦截器

package com.ljf.mscloud.filter;

import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

import java.util.Date;

/**
 * @auther zzyy
 * @create 2020-02-21 16:40
 */
@Component
@Slf4j
public class MyLogGateWayFilter implements GlobalFilter, Ordered


    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain)
    
        log.info("***********come in MyLogGateWayFilter:  "+new Date());

        String uname = exchange.getRequest().getQueryParams().getFirst("uname");

        if(uname == null)
        
            log.info("*******用户名为null,非法用户,o(╥﹏╥)o");
            exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
            return exchange.getResponse().setComplete();
        

        return chain.filter(exchange);
    

    @Override
    public int getOrder()
    
        return 0;
    

2.3 测试

1.启动9001,9002,9003,9004,9007 如下:

1.不携带uname参数

 2.携带uname参数

 

以上是关于springcloud3 GateWay的断言和filter操作的主要内容,如果未能解决你的问题,请参考以下文章

springcloud3 GateWay通过编码方式实现

gateway网关路由匹配规则

gateway内置路由断言工厂

Gateway 网关之 Predicate 断言

Spring Cloud gateway 网关服务二 断言过滤器

献给Gateway小白的一篇好文:断言Predicate