package com.dsh.utils; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * @author: lihong . * @email: lihongvst@foxmail.com . * @createTime: 2019/6/27 9:32 . * @describe: servlet工具. **/ public final class ServletUtils { /** * 获取请求对象. * @return */ public static HttpServletRequest getHttpServletRequest(){ HttpServletRequest request = getReqyuestAttributes().getRequest(); return request; } /** * 获取响应对象. * @return */ public static HttpServletResponse getHttpServletResponse(){ HttpServletResponse response = getReqyuestAttributes().getResponse(); return response; } /** * 获取请求参数. * @return */ private static ServletRequestAttributes getReqyuestAttributes(){ ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); return requestAttributes; } /** * 获取真实ip * @return */ public static String getIpAddr() { HttpServletRequest request = getHttpServletRequest(); String ip = request.getHeader("x-forwarded-for"); System.out.println("x-forwarded-for ip: " + ip); if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) { // 多次反向代理后会有多个ip值,第一个ip才是真实ip if( ip.indexOf(",")!=-1 ){ ip = ip.split(",")[0]; } } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_CLIENT_IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_X_FORWARDED_FOR"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("X-Real-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; } }