San*_*cho 5 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);
}
}
Run Code Online (Sandbox Code Playgroud)
我想删除该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));
}
}
Run Code Online (Sandbox Code Playgroud)
在功能上,此代码与上面的代码相同,但它似乎导致会话在部署在测试环境中时不会关闭和累积(文件描述符警报)。
这是我的项目上下文:Spring Boot 2.0.0.RELEASE、Tomcat、Webclient 连接池已禁用(也导致会话未关闭)。
我在这个实现中做错了什么吗?很难找到比操作 HTTP 标头更多的 WebFilter 示例。
| 归档时间: |
|
| 查看次数: |
1927 次 |
| 最近记录: |