网站建设定制开发gateway自定义过滤器

目录

网站建设定制开发全局过滤器(GloabalFilter)

注意:

  • 网站建设定制开发过滤器是指gateway在路由过程中(A地址路由到B地址)生效进行过滤操作的,所有首先你得先配一个地址路由。比如我站在这里设置将http://localhost:8000/gateway/* 请求路由到http://localhost:8010/user/*,那么下面的两个样例过滤器遍对这个过程进行过滤
        - id: user_route          uri: lb://server-user          #uri: http://localhost:8010          predicates:            - Path=/gateway/**          filters:            - RewritePath=/gateway/(?<segment>.*),/user/$\{segment}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 开启gateway的日志,方便后面查看过程
logging:  level:    org.springframework.cloud.gateway: DEBUG
  • 1
  • 2
  • 3

前置过滤器

@Componentpublic class MyHeadFilter implements GlobalFilter, Ordered {    @Override    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {        System.out.println("123123");        return chain.filter(exchange);    }    @Override    public int getOrder() {        return 0;    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

后置过滤器

@Componentpublic class MyTailFilter implements GlobalFilter, Ordered {    @Override    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {        return chain.filter(exchange)                .then(Mono.fromRunnable(                        () -> System.out.println("abcabc")                ));    }    @Override    public int getOrder() {        return 0;    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

运行结果

然后访问http://localhost:8000/gateway/listAll,路由到http://localhost:8010/user/listAll成功
控制台输出

局部过滤器

有两种方式:

  • 在上面全局模式的基础上,改为实现gatewayFilter和Ordered接口
  • 继承AbstractGatewayFilterFactory类(推荐)

我这里就实现了一下第二种方法。参考自和

局部过滤器实现

public class MyPartGatewayFilterFactory extends AbstractGatewayFilterFactory<MyPartGatewayFilterFactory.Config> {    private static final Log log = LogFactory.getLog(GatewayFilter.class);    private static final String NAME = "name";    public MyPartGatewayFilterFactory() {        super(Config.class);    }    @Override    public List<String> shortcutFieldOrder() {        return Arrays.asList(NAME);    }    @Override    public GatewayFilter apply(Config config) {        return (exchange, chain) -> {            return chain.filter(exchange).then(                    Mono.fromRunnable(() -> {                        StringBuilder sb = new StringBuilder("这是20227258点半之后的请求,请求者name(入参):");                        sb.append(config.getName());                        log.info(sb.toString());                    })            );        };    }    public static class Config{        private String name;        public String getName() {            return name;        }        public void setName(String name) {            this.name = name;        }    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

在gateway的启动类上进行注册

@Bean    public MyPartGatewayFilterFactory myGatewayFilterFactory(){        return new MyPartGatewayFilterFactory();    }
  • 1
  • 2
  • 3
  • 4

对应的配置文件部分

        - id: my_route          uri: http://127.0.0.1:8010          filters:            - name: MyPart              args:                name: yuan          predicates:#            - After=2017-01-20T17:42:47.789-07:00[America/Denver]            - After=2022-07-25T08:30:00.003+08:00[Asia/Shanghai]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

运行结果

访问http://localhost:8000/user/test

  • 8000是我的gateaway运行端口
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发