|
@@ -1,7 +1,11 @@
|
|
|
package com.caimei365.cloud.config;
|
|
|
|
|
|
+import org.apache.commons.lang.StringUtils;
|
|
|
import org.springframework.context.annotation.Configuration;
|
|
|
+import org.springframework.core.io.buffer.DataBuffer;
|
|
|
+import org.springframework.http.HttpStatus;
|
|
|
import org.springframework.http.server.reactive.ServerHttpRequest;
|
|
|
+import org.springframework.http.server.reactive.ServerHttpResponse;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import org.springframework.web.reactive.config.WebFluxConfigurer;
|
|
|
import org.springframework.web.server.ServerWebExchange;
|
|
@@ -34,9 +38,12 @@ public class WebConfiguration implements WebFluxConfigurer {
|
|
|
@Override
|
|
|
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
|
|
|
ServerHttpRequest request = exchange.getRequest();
|
|
|
- // 由于在低版本的spring-webflux中不支持直接获得请IP, 因此从ServerWebExchange中获得IP后,在放到header里
|
|
|
- InetSocketAddress remoteAddress = request.getRemoteAddress();
|
|
|
- String clientIp = Objects.requireNonNull(remoteAddress).getAddress().getHostAddress();
|
|
|
+ // 从我们的 nginx 重写请求获取的参数,X-Real-IP是在nginx中配置的,要对应上;
|
|
|
+ String clientIp = request.getHeaders().getFirst("X-Real-IP");
|
|
|
+ if (StringUtils.isEmpty(clientIp)) {
|
|
|
+ InetSocketAddress remoteAddress = request.getRemoteAddress();
|
|
|
+ clientIp = Objects.requireNonNull(remoteAddress).getAddress().getHostAddress();
|
|
|
+ }
|
|
|
ServerHttpRequest mutatedServerHttpRequest = request.mutate().header("X-CLIENT-IP", clientIp).build();
|
|
|
ServerWebExchange mutatedServerWebExchange = exchange.mutate().request(mutatedServerHttpRequest).build();
|
|
|
return chain.filter(mutatedServerWebExchange);
|