Java 如何在Serverlet请求中获取客户端系统Ip地址

Java 如何在Serverlet请求中获取客户端系统Ip地址,java,servlets,Java,Servlets,但是我没有得到Ip地址我得到的是相同的127.0.0.1每个请求的这个值不同的系统可以告诉我如何获得Ip地址。您可以这样做: @Autowired private HttpServletRequest request; 使HttpServletRequest自动连线,使其可用于控制器的任何功能: @GET @Produces(MediaType.APPLICATION_JSON) public Response login(@Context HttpHe

但是我没有得到Ip地址我得到的是相同的127.0.0.1每个请求的这个值不同的系统可以告诉我如何获得Ip地址。

您可以这样做:

@Autowired
private HttpServletRequest request;
使HttpServletRequest自动连线,使其可用于控制器的任何功能:

    @GET
        @Produces(MediaType.APPLICATION_JSON)
        public Response login(@Context HttpHeaders headers, @Context HttpServletRequest request) {
            System.out.println(getClientIpAddress(request));
            String ipAddress = request.getHeader("X-FORWARDED-FOR");
            if (ipAddress == null) {
                ipAddress = request.getRemoteAddr();
            }
            System.out.println("ip:" + ipAddress);
            return new LoginUtils().performLogin(headers.getRequestHeaders());
        }  

  public static String getClientIpAddress(HttpServletRequest request) {
            for (String header : HEADERS_TO_TRY) {
                String ip = request.getHeader(header);
                if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
                    return ip;
                }
            }
            return request.getRemoteAddr();
        }
然后在控制器中使用它,如下所示:

@Autowired
private HttpServletRequest request;

您是否从本地网络访问服务器?尝试远程访问它(移动网络上的电话或其他东西),看看这是否会改变视角。我做了同样的事情,但在这种情况下,我也得到127.0.0.1我想得到网络Ip地址,而不是主机地址