Gateway網關丟失請求頭解決辦法


在搭建微服務時,本人使用的SpringSecurity Oauth2認證授權,使用密碼方式,從認證中心獲取了token后,要將token攜帶在請求頭中,但是發現經過gateway網關后,token丟失了。

經過研究后,總結了一種方法,可以解決:通過使用過濾器,重新構建一個request,再向服務發送請求。

在網關服務增加一個bean,代碼如下:

@Component
public class RequestAuthFilter implements GlobalFilter, Ordered {

	@Override
	public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
		ServerHttpRequest request = exchange.getRequest();
		String url = request.getURI().getPath();

		//忽略以下url
		if(url.startsWith("/oauth") || url.startsWith("/login")){
			return chain.filter(exchange);
		}

		String token = request.getHeaders().getFirst(HttpHeaders.AUTHORIZATION);
		if(StringUtils.isBlank(token)){
			ServerHttpResponse response = exchange.getResponse();
			response.getHeaders().add(HttpHeaders.CONTENT_TYPE,MediaType.APPLICATION_JSON_UTF8_VALUE);
			exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
			return exchange.getResponse().setComplete();
		}else{
			ServerHttpRequest req = request.mutate().headers(header -> header.add(HttpHeaders.AUTHORIZATION, token)).build();
			ServerWebExchange webExchange = exchange.mutate().request(req).build();
			return chain.filter(webExchange);
		}
	}

	@Override
	public int getOrder() {
		return 100;
	}

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM