Skip to content

Instantly share code, notes, and snippets.

@Y-k-Y
Forked from c0rp-aubakirov/ClientInfo.java
Last active July 6, 2021 06:51
Show Gist options
  • Save Y-k-Y/5c54fe151f54196df26a3af916ee08d6 to your computer and use it in GitHub Desktop.
Save Y-k-Y/5c54fe151f54196df26a3af916ee08d6 to your computer and use it in GitHub Desktop.
How to get full client info using servlet request, including client IP, browser, os, use-agent and referer
@RequiredArgsConstructor
public class HttpClientUtil {
private final HttpServletRequest request;
private final String[] HEADERS_TO_TRY_TO_GET_IP = {
"X-Forwarded-For",
"Proxy-Client-IP",
"WL-Proxy-Client-IP",
"HTTP_X_FORWARDED_FOR",
"HTTP_X_FORWARDED",
"HTTP_X_CLUSTER_CLIENT_IP",
"HTTP_CLIENT_IP",
"HTTP_FORWARDED_FOR",
"HTTP_FORWARDED",
"HTTP_VIA",
"REMOTE_ADDR"};
public String getClientIpAddress() {
for (String header : HEADERS_TO_TRY_TO_GET_IP) {
String ip = request.getHeader(header);
if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
return ip;
}
}
return request.getRemoteAddr();
}
public String getReferer() {
return request.getHeader("referer");
}
public String getUserAgent() {
return request.getHeader("User-Agent");
}
public String getFullUrl() {
final StringBuffer requestUrl = request.getRequestURL();
final String queryString = request.getQueryString();
return queryString == null ? request.toString() : requestUrl.append('?')
.append(queryString)
.toString();
}
public String getClientOs() {
final String[] OS = {"windows", "mac", "x11", "android", "iphone"};
final String userAgent = getUserAgent();
final String lowerCaseUA = userAgent.toLowerCase();
for (String os : OS) {
if (lowerCaseUA.contains(os)) {
if(os.equals("x11")) return "Unix";
if(os.equals("mac") && lowerCaseUA.contains("iphone")) return "IOS";
return os.substring(0, 1).toUpperCase().concat(os.substring(1));
}
}
return "Unknown";
}
public String getClientBrowser() {
final String userAgent = getUserAgent();
final String lowerCaseUA = userAgent.toLowerCase();
String browser = "";
if (lowerCaseUA.contains("mise")) {
String substring = userAgent.substring(userAgent.indexOf("MSIE")).split(";")[0];
browser = substring.split(" ")[0].replace("MSIE", "IE") + "-" + substring.split(" ")[1];
} else if (lowerCaseUA.contains("safari") && lowerCaseUA.contains("version") && !lowerCaseUA.contains("naver")) {
browser = (userAgent.substring(userAgent.indexOf("Safari")).split(" ")[0])
.split("/")[0] + "-" + (userAgent.substring(userAgent.indexOf("Version"))
.split(" ")[0])
.split("/")[1];
} else if (lowerCaseUA.contains("opr") || lowerCaseUA.contains("opera")) {
if (lowerCaseUA.contains("opera")) {
browser = (userAgent.substring(userAgent.indexOf("Opera")).split(" ")[0])
.split("/")[0] + "-" + (userAgent.substring(userAgent.indexOf("Version"))
.split(" ")[0])
.split("/")[1];
} else if (lowerCaseUA.contains("opr")) {
browser = ((userAgent.substring(userAgent.indexOf("OPR")).split(" ")[0])
.replace("/", "-"))
.replace("OPR", "opera");
}
} else if (lowerCaseUA.contains("chrome")) {
browser = (userAgent.substring(userAgent.indexOf("Chrome")).split(" ")[0]).replace("/", "-");
} else if (
(lowerCaseUA.contains("mozilla/7.0")) ||
(lowerCaseUA.contains("netscape6")) ||
(lowerCaseUA.contains("mozilla/4.7")) ||
(lowerCaseUA.contains("mozilla/4.78")) ||
(lowerCaseUA.contains("mozilla/4.08")) ||
(lowerCaseUA.contains("mozilla/3"))
) {
browser = "Netscape-?";
} else if (lowerCaseUA.contains("firefox") || lowerCaseUA.contains("fx")) {
if(userAgent.contains("Fx")) {
browser = (userAgent.substring(userAgent.indexOf("Fx")).split(" ")[0]).replace("/", "-");
} else {
browser = (userAgent.substring(userAgent.indexOf("Firefox")).split(" ")[0]).replace("/", "-");
}
} else if (lowerCaseUA.contains("rv")) {
browser = "IE";
} else if (lowerCaseUA.contains("crios")) {
browser = (userAgent.substring(userAgent.indexOf("Cr")).split(" ")[0]).replace("/", "-");
} else if (lowerCaseUA.contains("naver")) {
browser = "Naver";
} else if (lowerCaseUA.contains("kakaotalk")) {
browser = "KakaoTalk";
} else if (lowerCaseUA.contains("whale")) {
browser = (userAgent.substring(userAgent.indexOf("Whale")).split(" ")[0]).replace("/", "-");
} else {
browser = "Unknown";
}
return browser;
}
public String getDevice() {
final String[] MOBILE = {
"android; mobile;",
"mobile safari",
"opera mobi",
"iemobile",
"iphone; cpu iphone",
};
final String userAgent = getUserAgent();
final String lowerCaseUA = userAgent.toLowerCase();
for(String mobile: MOBILE) {
if(lowerCaseUA.contains(mobile)) return "Mobile";
}
return "Desktop";
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment