Spring Cloud 使用Spring MVC或Webflux構(gòu)建一個(gè)簡單的網(wǎng)關(guān)

2024-01-06 11:15 更新
以下描述了替代樣式的網(wǎng)關(guān)。先前文檔的None適用于以下內(nèi)容。

Spring Cloud Gateway提供了一個(gè)名為ProxyExchange的實(shí)用程序?qū)ο螅梢栽诔R?guī)的Spring web處理程序中將其用作方法參數(shù)。它通過鏡像HTTP動詞的方法支持基本的下游HTTP交換。使用MVC,它還支持通過forward()方法轉(zhuǎn)發(fā)到本地處理程序。 要使用ProxyExchange,只需在類路徑中包含正確的模塊(spring-cloud-gateway-mvcspring-cloud-gateway-webflux)。

MVC示例(代理對遠(yuǎn)程服務(wù)器下游“ /測試”的請求):

@RestController
@SpringBootApplication
public class GatewaySampleApplication {

	@Value("${remote.home}")
	private URI home;

	@GetMapping("/test")
	public ResponseEntity<?> proxy(ProxyExchange<byte[]> proxy) throws Exception {
		return proxy.uri(home.toString() + "/image/png").get();
	}

}

與Webflux相同:

@RestController
@SpringBootApplication
public class GatewaySampleApplication {

	@Value("${remote.home}")
	private URI home;

	@GetMapping("/test")
	public Mono<ResponseEntity<?>> proxy(ProxyExchange<byte[]> proxy) throws Exception {
		return proxy.uri(home.toString() + "/image/png").get();
	}

}

ProxyExchange上有一些便利的方法可以使處理程序方法發(fā)現(xiàn)并增強(qiáng)傳入請求的URI路徑。例如,您可能希望提取路徑的尾隨元素以將它們傳遞到下游:

@GetMapping("/proxy/path/**")
public ResponseEntity<?> proxyPath(ProxyExchange<byte[]> proxy) throws Exception {
  String path = proxy.path("/proxy/path/");
  return proxy.uri(home.toString() + "/foos/" + path).get();
}

網(wǎng)關(guān)處理程序方法可以使用Spring MVC或Webflux的所有功能。因此,例如,您可以注入請求標(biāo)頭和查詢參數(shù),并且可以使用映射批注中的聲明來約束傳入的請求。有關(guān)這些功能的更多詳細(xì)信息,請參見Spring MVC中的@RequestMapping文檔。

可以使用ProxyExchange上的header()方法將標(biāo)頭添加到下游響應(yīng)中。

您還可以通過將映射器添加到get()等方法來操縱響應(yīng)頭(以及響應(yīng)中您喜歡的任何其他內(nèi)容)。映射器是Function,它接收傳入的ResponseEntity并將其轉(zhuǎn)換為傳出的ResponseEntity。

為不傳遞到下游的“敏感”標(biāo)頭(默認(rèn)情況下為“ cookie”和“授權(quán)”)以及“代理”標(biāo)頭(x-forwarded-*)提供了一流的支持。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號