|
@@ -1,5 +1,6 @@
|
|
package com.caimei.config;
|
|
package com.caimei.config;
|
|
|
|
|
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.context.annotation.Configuration;
|
|
import org.springframework.context.annotation.Configuration;
|
|
import org.springframework.http.server.reactive.ServerHttpRequest;
|
|
import org.springframework.http.server.reactive.ServerHttpRequest;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
@@ -37,12 +38,16 @@ public class WebConfiguration implements WebFluxConfigurer {
|
|
*/
|
|
*/
|
|
@Component
|
|
@Component
|
|
public static class RetrieveClientIpWebFilter implements WebFilter {
|
|
public static class RetrieveClientIpWebFilter implements WebFilter {
|
|
-
|
|
|
|
@Override
|
|
@Override
|
|
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
|
|
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
|
|
- InetSocketAddress remoteAddress = exchange.getRequest().getRemoteAddress();
|
|
|
|
- String clientIp = Objects.requireNonNull(remoteAddress).getAddress().getHostAddress();
|
|
|
|
- ServerHttpRequest mutatedServerHttpRequest = exchange.getRequest().mutate().header("X-CLIENT-IP", clientIp).build();
|
|
|
|
|
|
+ ServerHttpRequest request = exchange.getRequest();
|
|
|
|
+ // 从我们的 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();
|
|
ServerWebExchange mutatedServerWebExchange = exchange.mutate().request(mutatedServerHttpRequest).build();
|
|
return chain.filter(mutatedServerWebExchange);
|
|
return chain.filter(mutatedServerWebExchange);
|
|
}
|
|
}
|