如何在webflux中获取客户端IP?

How to get client IP in webflux?

我曾经调用 HttpServletRequest.getRemoteAddr() 来获取客户端 ip。

我想知道如何通过 ServerWebExchange 获取它。

我的最佳猜测是:

  serverWebExchange.getRequest().getRemoteAddress().getAddress().getHostAddress();

是否正确?

是的,这是实现该目标的正确方法。 请注意,如果您想支持转发或 X-Forwarded-* HTTP 请求 headers,则需要在服务器配置级别进行配置。

您还可以将 org.springframework.http.server.ServerHttpRequest 作为参数添加到 @RerquestMapping 注释方法并从中获取 IP 地址:

@GetMapping("/myPath")
public void someMethod(ServerHttpRequest request) {
    System.out.println(request.getRemoteAddress().getAddress().getHostAddress();)
}

你可以使用org.springframework.http.server.reactive.ServerHttpRequest,

String remoteAddress = serverHttpRequest.getRemoteAddress().getAddress().getHostAddress();

因为它在文档中很悲伤:.reactive.ServerHttpRequest 表示反应性 server-side HTTP 请求。

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/server/reactive/ServerHttpRequest.html