use*_*406 7 spring spring-boot spring-webflux
在传统的 Spring MVC 过滤器中,我可以在后面添加一些代码,chain.doFilter以便它们在最后执行。例如:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
chain.doFilter(request, response);
A();
}
Run Code Online (Sandbox Code Playgroud)
该函数A将在所有过滤器和控制器执行之后,甚至在onBeforeCommitResponse调用之后,在最后执行。
我想在 WebFlux 中做同样的事情WebFilter。
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
return chain.filter(exchange);
// Call A() after all filters, controllers and after beforeCommit
}
Run Code Online (Sandbox Code Playgroud)
我该如何实现这一目标?
如果您希望在所有过滤器和控制器逻辑完成后执行逻辑,您可以执行以下操作:
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
return chain.filter(exchange).doFinally(signalType -> {
//here signalType.toString() is `onComplete`
System.out.println("After all filters and controller");
// Call A()
});
}
Run Code Online (Sandbox Code Playgroud)
在我的示例代码中使用它会生成以下日志(我有 3 个网络过滤器):
2020-07-23 12:35:02.604 INFO c.b.e.i.ImageServiceApplication :[ ] Starting ImageServiceApplication on in1-1025453mbp with PID 97673 (/Users/Abhi/codes/image-service/out/production/classes started by 1025453 in /Users/Abhi/codes/image-service)
2020-07-23 12:35:02.606 INFO c.b.e.i.ImageServiceApplication :[ ] No active profile set, falling back to default profiles: default
2020-07-23 12:35:04.142 INFO o.s.b.a.e.web.EndpointLinksResolver :[ ] Exposing 2 endpoint(s) beneath base path '/actuator'
2020-07-23 12:35:04.461 INFO o.s.b.web.embedded.netty.NettyWebServer :[ ] Netty started on port(s): 8080
2020-07-23 12:35:04.479 INFO c.b.e.i.ImageServiceApplication :[ ] Started ImageServiceApplication in 2.134 seconds (JVM running for 2.767)
Executing ScopeCheckFilter
Executing TenancyContextFilter
Executing ImageSizeCheckFilter
2020-07-23 12:36:58.267 INFO c.b.e.i.controller.ImageController :[tenant1] Request received to generate SAS Token
2020-07-23 12:36:59.722 INFO c.b.e.i.s.a.AzureImageStorageService :[tenant1] Container exists
2020-07-23 12:36:59.722 INFO c.b.e.i.s.a.AzureImageStorageService :[tenant1] Generating SAS Token
After all filters
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1488 次 |
| 最近记录: |