|
@@ -13,7 +13,7 @@ import java.net.InetSocketAddress;
|
|
|
import java.util.Objects;
|
|
|
|
|
|
/**
|
|
|
- * Description
|
|
|
+ * 全局过滤器
|
|
|
*
|
|
|
* @author : Charles
|
|
|
* @date : 2021/3/24
|
|
@@ -22,6 +22,7 @@ import java.util.Objects;
|
|
|
public class WebConfiguration implements WebFluxConfigurer {
|
|
|
|
|
|
/**
|
|
|
+ * 获取客户端IP
|
|
|
* https://stackoverflow.com/questions/51192630/how-do-you-get-clients-ip-address-spring-webflux-websocket?rq=1
|
|
|
* https://stackoverflow.com/questions/50981136/how-to-get-client-ip-in-webflux
|
|
|
* https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html#webflux-filters
|
|
@@ -32,9 +33,11 @@ public class WebConfiguration implements WebFluxConfigurer {
|
|
|
public static class RetrieveClientIpWebFilter implements WebFilter {
|
|
|
@Override
|
|
|
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
|
|
|
- InetSocketAddress remoteAddress = exchange.getRequest().getRemoteAddress();
|
|
|
+ ServerHttpRequest request = exchange.getRequest();
|
|
|
+ // 由于在低版本的spring-webflux中不支持直接获得请IP, 因此从ServerWebExchange中获得IP后,在放到header里
|
|
|
+ InetSocketAddress remoteAddress = request.getRemoteAddress();
|
|
|
String clientIp = Objects.requireNonNull(remoteAddress).getAddress().getHostAddress();
|
|
|
- ServerHttpRequest mutatedServerHttpRequest = exchange.getRequest().mutate().header("X-CLIENT-IP", clientIp).build();
|
|
|
+ ServerHttpRequest mutatedServerHttpRequest = request.mutate().header("X-CLIENT-IP", clientIp).build();
|
|
|
ServerWebExchange mutatedServerWebExchange = exchange.mutate().request(mutatedServerHttpRequest).build();
|
|
|
return chain.filter(mutatedServerWebExchange);
|
|
|
}
|