一、IpUtil
package com.java.util;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.java.vo.IpVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
@Slf4j
public class IpUtil {
public static String getIpAddr(HttpServletRequest request) {
String ipAddress = null;
try {
String ipAddresses = request.getHeader("X-Forwarded-For");
if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
ipAddresses = request.getHeader("Proxy-Client-IP");
}
if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
ipAddresses = request.getHeader("WL-Proxy-Client-IP");
}
if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
ipAddresses = request.getHeader("HTTP_CLIENT_IP");
}
if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
ipAddresses = request.getHeader("X-Real-IP");
}
if (ipAddresses != null && ipAddresses.length() != 0) {
ipAddress = ipAddresses.split(",")[0];
}
if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
ipAddress = request.getRemoteAddr();
}
} catch (Exception e) {
ipAddress = "";
}
return ipAddress;
}
public static IpVo getIpVo(String ip){
String url = "http://whois.pconline.com.cn/ipJson.jsp?json=true";
if(!StringUtils.isEmpty(ip)){
url = "http://whois.pconline.com.cn/ipJson.jsp?json=true&ip=" + ip;
}
StringBuilder inputLine = new StringBuilder();
String read;
try {
HttpURLConnection urlConnection = (HttpURLConnection) new URL(url).openConnection();
urlConnection.setRequestProperty("Charset", "GBK");
BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "GBK"));
while ((read = in.readLine()) != null) {
inputLine.append(read);
}
in.close();
} catch (Exception e) {
e.printStackTrace();
}
IpVo ipVo = null;
try {
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
ipVo = mapper.readValue(new String(inputLine.toString().getBytes("GBK"), "GBK"), IpVo.class);
} catch (IOException e) {
e.printStackTrace();
}
return ipVo;
}
public static IpVo getIpVoByRequest(HttpServletRequest request){
return IpUtil.getIpVo(IpUtil.getIpAddr(request));
}
}
二、IpVo
package com.java.vo;
import lombok.Data;
@Data
public class IpVo {
private String ip;
private String pro;
private String proCode;
private String city;
private String cityCode;
private String region;
private String regionCode;
private String addr;
private String regionNames;
private String err;
}