The order of the beforeCommit
will be the order of the filters inside which they are specified.
eg.
If have a TenancyContextFilter
of Order -1:
@Component
@Order(-1)
public class TenancyContextFilter implements WebFilter {
private static final Logger LOGGER = LoggerFactory.getLogger(TenancyContextFilter.class);
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
//..some logic...
exchange.getResponse().beforeCommit(() -> {
return Mono.subscriberContext().doOnNext(ctx -> {
System.out.println("Executing before commit for TenancyContextFilter");
}).then();
});
return chain.filter(exchange);
}
}
and a ScopeCheckFilter
of order -2,
@Component
@Order(-2)
public class ScopeCheckFilter implements WebFilter {
private static final Logger LOGGER = LoggerFactory.getLogger(ScopeCheckFilter.class);
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
//some logic...
exchange.getResponse().beforeCommit(() -> {
return Mono.subscriberContext().doOnNext(ctx -> {
System.out.println("Executing before commit for ScopeCheckFilter");
}).then();
});
return chain.filter(exchange);
}
}
Then the ScopeCheckFilter
executes before TenancyContextFilter
, so as their beforeCommit logic.
Thus the logs I get, when I execute, are:
2020-07-23 13:04:09.345 INFO c.b.e.i.ImageServiceApplication :[ ] Starting ImageServiceApplication on in1-1025453mbp with PID 98071 (/Users/Abhi/codes/image-service/out/production/classes started by 1025453 in /Users/Abhi/codes/image-service)
2020-07-23 13:04:09.347 INFO c.b.e.i.ImageServiceApplication :[ ] No active profile set, falling back to default profiles: default
2020-07-23 13:04:10.606 INFO o.s.b.a.e.web.EndpointLinksResolver :[ ] Exposing 2 endpoint(s) beneath base path '/actuator'
2020-07-23 13:04:10.805 INFO o.s.b.web.embedded.netty.NettyWebServer :[ ] Netty started on port(s): 8080
2020-07-23 13:04:10.825 INFO c.b.e.i.ImageServiceApplication :[ ] Started ImageServiceApplication in 1.741 seconds (JVM running for 2.309)
2020-07-23 13:04:14.519 INFO c.b.e.i.controller.ImageController :[tenant1] Request received to generate SAS Token
2020-07-23 13:04:15.714 INFO c.b.e.i.s.a.AzureImageStorageService :[tenant1] Container exists
2020-07-23 13:04:15.715 INFO c.b.e.i.s.a.AzureImageStorageService :[tenant1] Generating SAS Token
Executing before commit for ScopeCheckFilter
Executing before commit for TenancyContextFilter
And if you have added your filters in the WebSecurity Filter Chain
, then, also, it will be same as the order in which you add those filters.
eg. Below I am adding the ScopeCheckFilter
first to the SecurityWebFilterChain
.
@Bean
SecurityWebFilterChain springWebFilterChain(ServerHttpSecurity http) {
http
.csrf().disable()
//..some logic....
;
http.addFilterAfter(new ScopeCheckFilter(), SecurityWebFiltersOrder.AUTHORIZATION);
http.addFilterAfter(new TenancyContextFilter(), SecurityWebFiltersOrder.AUTHORIZATION);
return http.build();
}