
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
package com.takensoft.common.util;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Component;
import jakarta.servlet.http.HttpServletRequest;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
* @author : takensoft
* @since : 2025.01.22
* @modification
* since | author | description
* 2025.01.22 | takensoft | 최초 등록
*
* HTTP 요청 관련 유틸리티
*/
@Component
public class HttpRequestUtil {
/**
* 기본 생성자
*/
private HttpRequestUtil() {
}
/**
* @param req - HTTP 요청 객체
* @return 클라이언트 IP 주소 (String)
* @throws UnknownHostException - 로컬 IP 주소를 확인할 수 없는 경우
*
* HTTP 요청에서 클라이언트의 IP 주소를 반환
*/
public String getIp(HttpServletRequest req){
try {
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;
} catch (UnknownHostException Uhe) {
throw new RuntimeException("호스트 IP의 정보를 알 수가 없습니다.", Uhe);
} catch (Exception e) {
throw e;
}
}
/**
* @param req - HTTP 요청 객체
* @return User-Agent (String)
*
* HTTP 요청에서 User-Agent 헤더 값을 추출
*/
public static String getUserAgent(HttpServletRequest req) {
return req.getHeader("User-Agent");
}
/**
* @param userAgent - User-Agent
* @return 운영체제 이름 (String)
*
* 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;
}
/**
* @param userAgent - User-Agent
* @return 디바이스 이름 (String)
*
* User-Agent에서 디바이스 정보를 추출
*/
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;
}
/**
* @param userAgent - User-Agent
* @return 브라우저 이름 (String)
*
* User-Agent에서 브라우저 정보를 추출
*/
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;
}
}