一,實習看到項目里這樣寫,第一次見到,整理筆記。^_^
第一種方法通過
RequestContextHolder獲取request對象,RequestContextHolder用於在其他層獲取請求響應對象。
第二種方法通過
當RequestContextHolder返回的ServletRequestAttributes不存在時,可以通過WebServiceContextImpl構建一個MessageContent對象,獲取request對象。
// 通過RequestContextHolder獲取請求對象。不需要傳入請求的對象。 ServletRequestAttributes attributes= (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); HttpServletRequest request=null; if(null!=attributes) { request = attributes.getRequest(); }else { // 當attributes不存在時 webServiceContext = new WebServiceContextImpl(); // 返回在MessageContext此方法時提供的請求的MessageContext MessageContext mc = (MessageContext) webServiceContext.getMessageContext(); // 通過MessageContext構建一個request對象。 request = (HttpServletRequest) (mc.get(MessageContext.SERVLET_REQUEST)); }
之后通過request對象的getHeader("X-Forwarded-For")獲取本地的真實Ip
public static String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("X-Forwarded-For"); 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.getRemoteAddr(); } /* * //這里主要是獲取本機的ip,可有可無 if (ip.equals("127.0.0.1") || * ip.endsWith("0:0:0:0:0:0:1")) { // 根據網卡取本機配置的IP InetAddress inet = * null; try { inet = InetAddress.getLocalHost(); } catch * (UnknownHostException e) { e.printStackTrace(); } ip = * inet.getHostAddress(); } */ return ip; }