package kl.pki.cacertservice.utils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.StringTokenizer;
@Slf4j
public class WebUtils {
private static final String UNKNOWN = "unknown";
private static final String X_REAL_IP = "X-Real-IP";
private static final String SERVLET_FORWARD_REQUEST_URI = "javax.servlet.forward.request_uri";
private static final String[] IP_HEADER_CANDIDATES = {
"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"};
private WebUtils() {
}
/**
* 获取IP地址
*
* @param request
* @return
*/
public static String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader(X_REAL_IP);
if (ip != null && ip.length() != 0 && !UNKNOWN.equalsIgnoreCase(ip)) {
return new StringTokenizer(ip, ",").nextToken().trim();
}
for (String header : IP_HEADER_CANDIDATES) {
ip = request.getHeader(header);
if (ip != null && ip.length() != 0 && !UNKNOWN.equalsIgnoreCase(ip)) {
return ip;
}
}
return request.getRemoteAddr();
}
/**
* 获取原请求URI地址
*
* @param request
* @return
*/
public static String getOriginatingRequestUri(HttpServletRequest request) {
String uri = (String) request.getAttribute(SERVLET_FORWARD_REQUEST_URI);
if (uri == null) {
uri = request.getRequestURI();
}
return uri;
}
/**
* URL编码地址
*
* @param url
* @return
*/
public static String urlEncode(String url) {
try {
return URLEncoder.encode(url, StandardCharsets.UTF_8.name());
} catch (UnsupportedEncodingException e) {
log.error("urlEncode error {}", e.getMessage(), e);
return url;
}
}
/**
* URL解码地址
*
* @param url
* @return
*/
public static String urlDecode(String url) {
try {
return URLDecoder.decode(url, StandardCharsets.UTF_8.name());
} catch (UnsupportedEncodingException e) {
log.error("urlDecode error {}", e.getMessage(), e);
return url;
}
}
/**
* 获取原请求URI地址
*
* @param request
* @return
*/
public static String getOriginRequestUrl(HttpServletRequest request) {
String host = request.getHeader("Host");
String scheme = request.getHeader("X-Forwarded-Proto");
if (StringUtils.isNotBlank(scheme)) {
int index = scheme.indexOf(",");
if (index > 0) {
scheme = scheme.substring(0, index);
}
}
if (StringUtils.isBlank(scheme)) {
scheme = "http";
}
if (StringUtils.isBlank(host)) {
host = request.getServerName();
}
return scheme + "://" + host;
}
}
package com.gp.cecp.common.util;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
public class IPUtils {
private static Logger logger = LoggerFactory.getLogger(IPUtils.class);
public static String getIpAddr() {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String ip = null;
try {
ip = request.getHeader("x-forwarded-for");
if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (StringUtils.isEmpty(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
} catch (Exception e) {
logger.error("IPUtils ERROR ", e);
}
return ip;
}
}