package com.takensoft.common.util; import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; import java.net.InetAddress; import java.net.UnknownHostException; @Component public class CommonUtils { // 사용자 아이피 주소 public String getIp(HttpServletRequest req) throws UnknownHostException { String ip = req.getHeader("X-Forwarded-For"); if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = req.getHeader("Proxy-Client-IP"); } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = req.getHeader("WL-Proxy-Client-IP"); } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = req.getHeader("HTTP_CLIENT_IP"); } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = req.getHeader("HTTP_X_FORWARDED_FOR"); } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = req.getHeader("X-Real-IP"); } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = req.getHeader("X-RealIP"); } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = req.getHeader("REMOTE_ADDR"); } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = req.getRemoteAddr(); } if(ip.equals("0:0:0:0:0:0:0:1") || ip.equals("127.0.0.1") || ip.equals("::1")) { InetAddress adr = InetAddress.getLocalHost(); ip = adr.getHostAddress(); // ip = adr.getHostName() + "/" + adr.getHostAddress(); } else if (ip.startsWith("::ffff:")) { ip = ip.substring(7); // ::ffff:를 제거하고 IPv4 주소만 추출 } return ip; } // HTTP 요청에서 User-Agent 해더 추출 public static String getUserAgent(HttpServletRequest req) { return req.getHeader("User-Agent"); } // 운영체제 정보 추출 public static String getOS(String userAgent) { String os = "Unknown"; // userAgent 문자열에서 운영체제 정보 추출 if(userAgent != null && !userAgent.isEmpty()) { if(userAgent.toLowerCase().contains("windows")) { os = "Windows"; } else if(userAgent.toLowerCase().contains("mac")) { os = "Mac"; } else if(userAgent.toLowerCase().contains("linux")) { os = "Linux"; } } return os; } // 디바이스 정보 추출 public static String getDevice(String userAgent) { String device = "Unknown"; // userAgent 문자열에서 디바이스 정보 추출 if(userAgent != null && !userAgent.isEmpty()) { if(userAgent.toLowerCase().contains("mobile")) { device = "Mobile"; } else { device = "Desktop"; } } return device; } // 브라우저 정보 추출 public static String getBrowser(String userAgent) { String browser = "Unknown"; // userAgent 문자열에서 브라우저저 정보추출 if(userAgent != null && !userAgent.isEmpty()) { if(userAgent.toLowerCase().contains("msie")) { browser = "Internet Explorer"; } else if(userAgent.toLowerCase().contains("firefox")) { browser = "Firefox"; } else if(userAgent.toLowerCase().contains("chrome")) { browser = "Chrome"; } else if(userAgent.toLowerCase().contains("safari")) { browser = "Safari"; } else if(userAgent.toLowerCase().contains("edge")) { browser = "Edge"; } } return browser; } }