请问 Spring cloud gateway 如何在 filter 中解析请求中的文件和字符串变量呢?

查看 25|回复 0
作者:bai821547889   
各位前辈好,因为我刚接触 Spring cloud gateway ,不太懂这个框架,想请教个问题。
我这个功能逻辑是这样的:在一个自定义的局部过滤器,通过getMultipartData()来解析请求中的文件和字符串变量后做一些业务逻辑,然后不继续走别的过滤器,直接返回。
但是我的这份代码问题在于:
  • 如果拦截掉这个请求,即return exchange.getResponse().setComplete()并不会触发getMultipartData()这个流,得不到数据;
  • 但如果放行这个请求,即return chain.filter(exchange),却可以触发这个流,获得数据。

    请问这个现象是因为什么引起呢,或者啥关键词可以提示一下?我从凌晨三四点就开始考虑这个问题了,实在无能为力。 谢谢大家。
    @Slf4j
    @Component
    public class FileFilterGatewayFilterFactory extends
            AbstractGatewayFilterFactory{
        public FileFilterGatewayFilterFactory() {
            super(FileFilterGatewayFilterFactory.ParamsConfig.class);
        }
        @Override
        public GatewayFilter apply(FileFilterGatewayFilterFactory.ParamsConfig config) {
            return new OrderedGatewayFilter(((exchange, chain) -> {
                parseBody(exchange).subscribe();
                
                
                // 如果放行,可以触发 parseBody 里面的方法
                return chain.filter(exchange);
                
                
                // 如果不放行,parseBody 里面的方法根本不执行
                return exchange.getResponse().setComplete();
            }),10);
        }
        public Mono parseBody(@NotNull ServerWebExchange exchange) {
            return exchange.getMultipartData().map(multipartData -> {
                Map partMap = multipartData.toSingleValueMap();
                Part file = partMap.get("file");
                FormFieldPart bizName = (FormFieldPart) partMap.get("name");
                return Result.buildSuccessResult("成功", null);
            });
        }
  • 您需要登录后才可以回帖 登录 | 立即注册

    返回顶部