Spring Cloud修改解析遠(yuǎn)程地址的方式

2024-01-04 17:29 更新

默認(rèn)情況下,RemoteAddr路由謂詞工廠使用傳入請求中的遠(yuǎn)程地址。如果Spring Cloud網(wǎng)關(guān)位于代理層后面,則此地址可能與實(shí)際的客戶端IP地址不匹配。

您可以通過設(shè)置自定義RemoteAddressResolver來自定義解析遠(yuǎn)程地址的方式。Spring Cloud網(wǎng)關(guān)帶有一個(gè)基于X-Forwarded-For標(biāo)頭 XForwardedRemoteAddressResolver非默認(rèn)遠(yuǎn)程地址解析器。

XForwardedRemoteAddressResolver有兩個(gè)靜態(tài)構(gòu)造方法,它們采用不同的安全性方法:

XForwardedRemoteAddressResolver::trustAll返回一個(gè)RemoteAddressResolver,該地址始終使用在X-Forwarded-For標(biāo)頭中找到的第一個(gè)IP地址。這種方法容易受到欺騙,因?yàn)閻阂饪蛻舳丝赡軙?code class="literal" i="4891">X-Forwarded-For設(shè)置一個(gè)初始值,該初始值將被解析程序接受。

XForwardedRemoteAddressResolver::maxTrustedIndex獲取一個(gè)索引,該索引與在Spring Cloud網(wǎng)關(guān)前面運(yùn)行的受信任基礎(chǔ)結(jié)構(gòu)的數(shù)量相關(guān)。例如,如果Spring Cloud網(wǎng)關(guān)只能通過HAProxy訪問,則應(yīng)使用值1。如果在訪問Spring Cloud網(wǎng)關(guān)之前需要兩跳可信基礎(chǔ)結(jié)構(gòu),則應(yīng)使用值2。

給定以下標(biāo)頭值:

X-Forwarded-For: 0.0.0.1, 0.0.0.2, 0.0.0.3

下面的maxTrustedIndex值將產(chǎn)生以下遠(yuǎn)程地址。

maxTrustedIndex結(jié)果

[Integer.MIN_VALUE,0]

(invalid, IllegalArgumentException during initialization)

1

0.0.0.3

2

0.0.0.2

3

0.0.0.1

[4, Integer.MAX_VALUE]

0.0.0.1

使用Java配置:

GatewayConfig.java

RemoteAddressResolver resolver = XForwardedRemoteAddressResolver
    .maxTrustedIndex(1);

...

.route("direct-route",
    r -> r.remoteAddr("10.1.1.1", "10.10.1.1/24")
        .uri("https://downstream1")
.route("proxied-route",
    r -> r.remoteAddr(resolver,  "10.10.1.1", "10.10.1.1/24")
        .uri("https://downstream2")
)
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號