本文介紹了如何使用WebFilter實現授權頭檢查的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我是Spring Webflow的新手。我想使用WebFilter進行身份驗證檢查。因此,我們的想法是截取請求,檢查授權標頭,并傳播請求
以下是我試圖做的事情。我已成功攔截請求并檢查頭部是否正確。
public class AuthWebFilter implements WebFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
log.info("Request {} called", exchange.getRequest().getPath().value());
System.out.println("Tokent authenitcation..");
ServerHttpResponse response = exchange.getResponse();
getAuthorization(exchange.getRequest())
.doOnError(error -> exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED)))
.subscribe(authorization -> System.out.println(authorization));
return chain.filter(exchange);
}
private Mono<String> getAuthorization(ServerHttpRequest request) {
String authorization = request.getHeaders().getFirst(Authorization);
if (StringUtils.isBlank(authorization)) {
return Mono.error(
new UnauthorizedException(
Status.Unauthorized, "The request must provide authorization.", null));
}
return Mono.just(authorization);
}
}
問題是,如果發生錯誤,我不知道如何中斷流。盡管狀態代碼更改為401,但響應正文仍包含請求的數據。換句話說,它被視為成功請求,但只更改狀態代碼
有人知道我在這里錯過了什么步驟嗎?
推薦答案
將您的代碼組合為一個鏈,如下所示:
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
log.info("Request {} called", exchange.getRequest().getPath().value());
System.out.println("Tokent authenitcation..");
ServerHttpResponse response = exchange.getResponse();
return getAuthorization(exchange.getRequest())
.doOnError(error -> exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED)))
.then(chain.filter(exchange));
}
如果您的授權方法發出錯誤,則不會調用篩選器鏈。
這篇關于如何使用WebFilter實現授權頭檢查的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,