为了账号安全,请及时绑定邮箱和手机立即绑定

gateWay(3)内置过滤器工厂

标签:
Java

内置谓词工厂共有26种
https://www.imooc.com/article/290816

9种内置全局过滤器!
https://www.imooc.com/article/290821      

通过手记进行测试即可

routes:
  - id: aftre-routes
    uri: lb://user-center
    predicates:
      - TimeBetween=上午0:00,下午11:59
    filters:
      - AddRequestHeader=X-Request-Foo, Bar

https://img1.sycdn.imooc.com//6104e6e10001986308010301.jpghttps://img1.sycdn.imooc.com//6104e7050001f86b07970352.jpg

配置形式

https://img1.sycdn.imooc.com//6104e718000102e308600548.jpg

https://img1.sycdn.imooc.com//6104e7530001ac4c08950488.jpg

配置形式

https://img1.sycdn.imooc.com//6104e7690001aff808990467.jpg


AbstractNameValueGatewayFilterFactory继承了AbstractGatewayFilterFactory,也就是第二种方式是第一种方式的简化

https://img1.sycdn.imooc.com//6104e8460001715c08740456.jpg


eg:

package com.itmuch.gateway;

import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractNameValueGatewayFilterFactory;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
@Component
@Slf4j
public class PreLogGatewayFilterFactory extends AbstractNameValueGatewayFilterFactory {
    @Override
    public GatewayFilter apply(NameValueConfig config) {

        return ((exchange, chain) ->{
            log.info("请求进来了,{},{}",config.getName(),config.getValue());//过滤器业务逻辑
            ServerHttpRequest build = exchange.getRequest().mutate().build();//拿到request并修改请求
            ServerWebExchange build1 = exchange.mutate().request(build).build();//将修改过后的请求传进去就可以修改exchange

            return chain.filter(build1);
            
        });
    }
}
routes:
  - id: aftre-routes
    uri: lb://user-center
    predicates:
      - TimeBetween=上午0:00,下午11:59
    filters:
      - AddRequestHeader=X-Request-Foo, Bar
      - PreLog=a,b

与自定义过滤器的命名还有配置文件的配置与自定义谓词工厂类似

在访问服务user-center时候就会打印

2021-07-31 14:37:00.149  INFO 7732 --- [ctor-http-nio-2] c.i.gateway.PreLogGatewayFilterFactory   : 请求进来了,a,b


gateway 监控端点
https://www.imooc.com/article/290822      


调试排除三板斧:
https://www.imooc.com/article/290824      

过滤器执行顺序:

1.oder越小越靠前执行
2.过滤器工厂的order按配置顺序从1开始递增
3.如果配置了默认过滤器,则先执行相同的order的默认过滤器
4.如需自行控制order,可返回OrderedGatewayFilter:

package com.itmuch.gateway;

import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.OrderedGatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractNameValueGatewayFilterFactory;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;

@Component
@Slf4j
public class PreLogGatewayFilterFactory extends AbstractNameValueGatewayFilterFactory {
    @Override
    public GatewayFilter apply(NameValueConfig config) {

        //如果需要自行控制这个过滤器的order,从而调整执行顺序,可以这样返回一个GatewayFilter
        GatewayFilter gatewayFilter = ((exchange, chain) -> {
            log.info("请求进来了,{},{}", config.getName(), config.getValue());//过滤器业务逻辑
            ServerHttpRequest build = exchange.getRequest().mutate().build();//拿到request并修改请求
            ServerWebExchange build1 = exchange.mutate().request(build).build();//将修改过后的请求传进去就可以修改exchange

            return chain.filter(build1);//将修改好的exchange交给下一个过滤器
        });
        return new OrderedGatewayFilter(gatewayFilter, 1000);

        //      //普通自定义过滤器
//        return ((exchange, chain) ->{
//            log.info("请求进来了,{},{}",config.getName(),config.getValue());//过滤器业务逻辑
//            ServerHttpRequest build = exchange.getRequest().mutate().build();//拿到request并修改请求
//            ServerWebExchange build1 = exchange.mutate().request(build).build();//将修改过后的请求传进去就可以修改exchange
//
//            return chain.filter(build1);//将修改好的exchange交给下一个过滤器
//        });
    }
}


gateway限流手记,gateway限流比sentile限流更简单

https://www.imooc.com/article/290828

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消