使用Netty服务器在Spring WebFlux中控制器之后是否有WebFilter火灾?

发布于 2025-02-03 12:35:06 字数 196 浏览 4 评论 0原文

我正在寻找Spring Webflux中的Servlet 过滤器等效。 WebFilter似乎仅在控制器之前触发,但不在后面发射。例如,我可以在请求进来时添加WebFilter做某事,但是当响应退回时,我找不到等效的“过滤器”来执行某件事。

您能以两种方式发射一个“过滤器”吗?

I am looking for servlet Filter equivalent in Spring WebFlux. The WebFilter seems to only fires before the controller but not after. e.g I can add a WebFilter to do something when a request comes in, but I couldn't find an equivalent "filter" to do something when a response is sending back.

Can you have a "filter" that fires in both ways?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浅浅淡淡 2025-02-10 12:35:06

只需在webfilterchain.filter调用之后添加代码。

@Component
public class MyFilter implements WebFilter {

@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
  Mono<Void> result = chain.filter(exchange);
  return result.then(<do-whatever>);
}

Just add code after the webFilterChain.filter call.

@Component
public class MyFilter implements WebFilter {

@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
  Mono<Void> result = chain.filter(exchange);
  return result.then(<do-whatever>);
}
面如桃花 2025-02-10 12:35:06

您仍然可以使用WebFilter也可以修改服务器的出站响应。这是在响应中添加标头的示例:

@Component
public class ExampleWebFilter implements WebFilter {
 
    @Override
    public Mono<Void> filter(ServerWebExchange serverWebExchange, 
      WebFilterChain webFilterChain) {
        
        serverWebExchange.getResponse()
          .getHeaders().add("web-filter", "web-filter-test");
        return webFilterChain.filter(serverWebExchange);
    }
}

参考: https://www.baeldung.com /spring-webflux-filters

You can still use WebFilter to modify your server's outbound responses as well. Here's an example of adding a header to the response:

@Component
public class ExampleWebFilter implements WebFilter {
 
    @Override
    public Mono<Void> filter(ServerWebExchange serverWebExchange, 
      WebFilterChain webFilterChain) {
        
        serverWebExchange.getResponse()
          .getHeaders().add("web-filter", "web-filter-test");
        return webFilterChain.filter(serverWebExchange);
    }
}

Reference: https://www.baeldung.com/spring-webflux-filters

北陌 2025-02-10 12:35:06

我认为您要寻找的技巧是当您在过滤器方法中调用过滤器链时,您想要以下

@Override
public Mono<Void> filter(@NonNull final ServerWebExchange exchange, @NonNull final WebFilterChain chain) {
        final ServerHttpRequest request = exchange.getRequest();
        final String requestUrl = request.getURI().toString();
        
        // preRequest: - YOUR LOGIC

        return chain.filter(exchange).doFinally(signalType -> {
            /* This doFinally is included so the tests will pass */
            log.info("postHandle: Just like an interceptor");
        });
}

I think the trick you are looking for is when you call the filter chain in the filter method you want the following

@Override
public Mono<Void> filter(@NonNull final ServerWebExchange exchange, @NonNull final WebFilterChain chain) {
        final ServerHttpRequest request = exchange.getRequest();
        final String requestUrl = request.getURI().toString();
        
        // preRequest: - YOUR LOGIC

        return chain.filter(exchange).doFinally(signalType -> {
            /* This doFinally is included so the tests will pass */
            log.info("postHandle: Just like an interceptor");
        });
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文