Spring Boot获取请求的ip地址

3,432 阅读1分钟

废话不多说, 直接上代码。

import org.springframework.http.HttpRequest;
import java.net.InetAddress;
import java.net.UnknownHostException;
@RequestMapping("sys")
public class(){
	private static final String UNKNOWN = "unknown";
    private static final String LOCALHOST = "127.0.0.1";
    private static final String SEPARATOR = ",";
    
    public String getIpAddress(HttpServletRequest request){
      String ipAddress;
          try {
              ipAddress = request.getHeader("x-forwarded-for");
              if (ipAddress == null || ipAddress.length() == 0 || UNKNOWN.equalsIgnoreCase(ipAddress)) {
                  ipAddress = request.getHeader("Proxy-Client-IP");
              }
              if (ipAddress == null || ipAddress.length() == 0 || UNKNOWN.equalsIgnoreCase(ipAddress)) {
                  ipAddress = request.getHeader("WL-Proxy-Client-IP");
              }
              if (ipAddress == null || ipAddress.length() == 0 || UNKNOWN.equalsIgnoreCase(ipAddress)) {
                  ipAddress = request.getRemoteAddr();
                  if (LOCALHOST.equals(ipAddress)) {
                      InetAddress inet = null;
                      try {
                          inet = InetAddress.getLocalHost();
                      } catch (UnknownHostException e) {
                          e.printStackTrace();
                      }
                      ipAddress = inet.getHostAddress();
                  }
              }
              // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
              // "***.***.***.***".length()
              if (ipAddress != null && ipAddress.length() > 15) {
                  if (ipAddress.indexOf(SEPARATOR) > 0) {
                      ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
                  }
              }
          } catch (Exception e) {
              ipAddress = "";
          }
          System.out.println(ipAddress);
          return ipAddress;
	}

}