当前位置: 首页 > article >正文

Solon Cloud Gateway 开发:Route 的过滤器与定制

RouteFilterFactory 是专为路由过滤拦截处理设计的接口。对应路由配置 filters

1、内置的路由过滤器

过滤器工厂本置前缀说明与示例
AddRequestHeaderFilterFactoryAddRequestHeader=添加请求头
(AddRequestHeader=Demo-Ver,1.0)
AddResponseHeaderFilterFactoryAddResponseHeader=添加响应头
(AddResponseHeader=Demo-Ver,1.0)
PrefixPathFilterFactoryPrefixPath=附加路径前缀
(PrefixPath=/app)
RedirectToFilterFactoryRedirectTo=跳转到
(RedirectTo=302,http://demo.org/a,true)
RemoveRequestHeaderFilterFactoryRemoveRequestHeader=移除请求头
(RemoveRequestHeader=Demo-Ver,1.0)
RemoveResponseHeaderFilterFactoryRemoveResponseHeader=移除响应头
(RemoveResponseHeader=Demo-Ver,1.0)
StripPrefixFilterFactoryStripPrefix=移除路径前缀段数
(StripPrefix=1)

2、定制示例

  • StripPrefix 过滤器定制示例(配置例:StripPrefix=1
@Component
public class StripPrefixFilterFactory implements RouteFilterFactory {

    @Override
    public String prefix() {
        return "StripPrefix";
    }

    @Override
    public ExFilter create(String config) {
        return new StripPrefixFilter(config);
    }

    public static class StripPrefixFilter implements ExFilter {
        private int parts;

        public StripPrefixFilter(String config) {
            if (Utils.isBlank(config)) {
                throw new IllegalArgumentException("StripPrefixFilter config cannot be blank");
            }

            this.parts = Integer.parseInt(config);
        }

        @Override
        public Completable doFilter(ExContext ctx, ExFilterChain chain) {
            //目标路径重组
            List<String> pathFragments = Arrays.asList(ctx.newRequest().getPath().split("/", -1));
            String newPath = "/" + String.join("/", pathFragments.subList(parts + 1, pathFragments.size()));
            ctx.newRequest().path(newPath);

            return chain.doFilter(ctx);
        }
    }
}

http://www.kler.cn/a/517703.html

相关文章:

  • [SUCTF 2018]MultiSQL1
  • STM32 硬件I2C读写
  • 2_高并发内存池_各层级的框架设计及ThreadCache(线程缓存)申请内存设计
  • 保健食品注册数据库<一键查询保健食品信息>
  • CNN-GRU卷积门控循环单元时间序列预测(Matlab完整源码和数据)
  • Linux 系统错误处理简介
  • uni-app 程序打包 Android apk、安卓夜神模拟器调试运行
  • VScode使用笔记
  • YOLO11改进-模块-引入Restormer模块
  • OpenCV:在图像中添加高斯噪声、胡椒噪声
  • freeswtch目录下modules.conf各个模块的介绍【freeswitch版本1.6.8】
  • 使用 C++ 在深度学习中的应用:如何通过 C++20 构建高效神经网络
  • vue3 中如何监听 props 中的值的变化
  • 自定义脚手架
  • Rust使用tokio(一)
  • 蓝桥杯3520 翻转 | 贪心+分类讨论
  • 《Effective Java》学习笔记——第7部分并发
  • 一文讲清JVM中的内存泄漏问题
  • Go语言中的值类型和引用类型特点
  • STM32项目分享:智能宠物喂食系统(升级版)
  • 软件过程模型
  • python动态全局缓存配置
  • 【论文+源码】 SeqDiffuSeq带有序列到序列生成的编码器变压器的文本扩散模型
  • OpenCV相机标定与3D重建(65)对图像点进行去畸变处理函数undistortPoints()的使用
  • 洛谷P1469 找筷子
  • Scala语言的移动应用开发