1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- package cn.efunbox.base.util;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.lang3.StringUtils;
- import javax.servlet.http.HttpServletRequest;
- /**
- * IpUtils
- * Created by xusq on 2017/10/19.
- */
- @Slf4j
- public class IpUtils {
- private IpUtils(){}
- public static String getIp(HttpServletRequest request) {
- String ip = request.getHeader("X-Forwarded-For");
- if(StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)){
- //多次反向代理后会有多个ip值,第一个ip才是真实ip
- int index = ip.indexOf(",");
- if(index != -1){
- return ip.substring(0,index);
- }else{
- return ip;
- }
- }
- ip = request.getHeader("X-Real-IP");
- if(StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)){
- return ip;
- }
- return request.getRemoteAddr();
- }
- private static final String[] HEADERS_TO_TRY = {
- "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",
- "X-Real-IP"};
- /***
- * 获取客户端ip地址(可以穿透代理)
- * @param request
- * @return
- */
- public static String getClientIpAddress(HttpServletRequest request) {
- for (String header : HEADERS_TO_TRY) {
- String ip = request.getHeader(header);
- if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
- return ip;
- }
- }
- return request.getRemoteAddr();
- }
- }
|