我想在WebFilter中执行以下操作,以选择绕过后续的过滤器和RestController:
if(shouldRedirect(exchange)){
//do redirect
}else if(!canAccess(exchange)){
//return a 403 response
}else{
chain.filter(exchange);
}
我应该怎么做?
谢谢
利昂
答案 0 :(得分:1)
从技术上讲,合同规定过滤器必须返回Mono<Void>
,这在处理交换(请求+响应)后完成。
通常的WebFilter
在请求/响应上执行某些操作,然后将交换转发到链中的下一个过滤器。但是您也可以单方面处理交换并将其完成。
在此示例中,我们将设置状态代码并调用响应完成。
class MyFilter implements WebFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(HttpStatus.NOT_FOUND);
return response.setComplete();
}
}