首页 > Java > Spring boot WebFlux:WebFilter 不起作用

Spring boot WebFlux:WebFilter 不起作用

PHPz
发布: 2024-02-09 09:30:31
转载
676 人浏览过

php小编香蕉介绍,Spring Boot WebFlux是一种基于响应式编程的Web框架,提供了一种异步非阻塞的方式处理HTTP请求。然而,有时候我们可能会遇到WebFilter不起作用的问题。WebFilter是用于在请求进入Web应用程序之前或之后执行某些操作的组件。本文将探讨可能导致WebFilter不起作用的原因,并提供解决方案,以确保WebFilter在Spring Boot WebFlux中正常工作。

问题内容

我有下面的控制器,它返回字符串的 mono

@restcontroller
@requestmapping("api/v1/test")
public class testcontroller {

    @postmapping
    public mono<string> getdraft() {
        return mono.just("ok");
    }

}
登录后复制

我添加了bean webfilter来在请求到来时进行一些处理,问题是bean中的消息没有显示在控制台中,我尝试添加断点来调试,但是当我测试api时却没有停在断点处。在 actuator/beans 中,我找到了 bean slf4jmdcfilter。还有另一个配置要添加吗?

@Configuration
public class WebConfig {

    public static final String TRX_ID = "transactionId";
    public static final String PATH_URI = "pathUri";

    @Bean
    @Order(Ordered.HIGHEST_PRECEDENCE)
    WebFilter slf4jMdcFilter() {
        return (exchange, chain) -> {
            System.out.println("Filtering request");
            String requestId = exchange.getRequest().getId();
            return chain.filter(exchange)
                    .contextWrite(Context.of(TRX_ID, requestId)
                            .put(PATH_URI, exchange.getRequest().getPath()));
        };
    }

}
登录后复制

解决方法

这可以通过使用 defercontextual(function) & transformdeferredcontextual(bifunction)

@Component
public class YourFilter implements WebFilter {

  @Override
  public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
    return Mono.deferContextual(contextView -> chain.filter(exchange)
        .contextWrite(context -> context.put("KEY", "VALUE")));
  }
}

// controller
 @Override
  public Mono<String> testApi(ServerWebExchange exchange) {
    return Mono.just("OK")
        .transformDeferredContextual((data, context) -> {
          log.info("context is {}", (Object) context.get("KEY"));
          return data;
        });
  }
登录后复制

以上是Spring boot WebFlux:WebFilter 不起作用的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:stackoverflow.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板