Spring Webflux WebFilter中的会话管理

时间:2018-04-09 08:55:17

标签: java spring spring-boot spring-webflux

我正在使用Spring Webflux,我通过这种方式处理网络过滤器中的会话:

public class DemoFilter implements WebFilter {

      @Override
      public Mono<Void> filter(final ServerWebExchange serverWebExchange, final WebFilterChain webFilterChain) {

           WebSession webSession = serverWebExchange.getSession().block();

           webSession.getAttributes().put("attribute", attributeValue);

           return webFilterChain.filter(serverWebExchange);
      }
}

我想删除block()指令并以非阻塞方式获取会话,所以我尝试了这个:

public class DemoFilter implements WebFilter {

        @Override
        public Mono<Void> filter(final ServerWebExchange serverWebExchange, final WebFilterChain webFilterChain) {

            return serverWebExchange.getSession()
                .doOnNext(webSession -> {
                webSession.getAttributes().put("attribute", attributeValue);
                }).then(webFilterChain.filter(serverWebExchange));
        }
}

从功能上讲,此代码与上面的代码一样,但它似乎导致会话在测试环境(文件描述符警报)上部署时不会关闭和累积。

这是我的项目上下文:Spring Boot 2.0.0.RELEASE,Tomcat,Webclient连接池已禁用(也导致会话未关闭)。

我在这个实现中做错了吗?很难找到WebFilters的例子,而不仅仅是操纵HTTP头。

0 个答案:

没有答案