|
|
|
|
@ -3,8 +3,40 @@ package cokr.xit.applib;
|
|
|
|
|
import java.util.regex.Matcher;
|
|
|
|
|
import java.util.regex.Pattern;
|
|
|
|
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
|
|
|
|
|
|
public class AppCmmnUtil {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* http 서블릿 요청으로부터 클라이언트 IP를 반환한다.
|
|
|
|
|
* @param http 서블릿 요청
|
|
|
|
|
* @return 클라이언트 IP
|
|
|
|
|
*/
|
|
|
|
|
public static String getClientIpAddr(HttpServletRequest request) {
|
|
|
|
|
String REGEXP_IPV4_ADDR = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";
|
|
|
|
|
String[] headerNames = {"X-Forwarded-For","Proxy-Client-IP","WL-Proxy-Client-IP","HTTP_CLIENT_IP","HTTP_X_FORWARDED_FOR"};
|
|
|
|
|
|
|
|
|
|
String ip = "";
|
|
|
|
|
for(String headerName : headerNames) {
|
|
|
|
|
ip = request.getHeader(headerName);
|
|
|
|
|
if(ip != null && ip.contains(",")) {
|
|
|
|
|
ip = ip.split(",",-1)[0];
|
|
|
|
|
}
|
|
|
|
|
if(ip != null && Pattern.matches(REGEXP_IPV4_ADDR, ip)) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(ip != null && ip.contains(",")) {
|
|
|
|
|
ip = ip.split(",",-1)[0];
|
|
|
|
|
}
|
|
|
|
|
if(ip == null || !Pattern.matches(REGEXP_IPV4_ADDR, ip)) {
|
|
|
|
|
ip = request.getRemoteAddr();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ip;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 전화번호(유선,무선) 형식인지 체크한다.
|
|
|
|
|
* @param 문자열
|
|
|
|
|
|