package com.ibeetl.admin.core.util; import java.net.InetAddress; import java.net.UnknownHostException; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Component; import com.ibeetl.admin.core.conf.MVCConf; /** * 保留用户会话,以方便在业务代码任何地方调用 * {@link MVCConf} * @author lijiazhi * */ @Component public class HttpRequestLocal { public HttpRequestLocal(){ } private static final ThreadLocal requests = new ThreadLocal() { @Override protected HttpServletRequest initialValue() { return null; } }; public Object getSessionValue(String attr){ return requests.get().getSession().getAttribute(attr); } public void setSessionValue(String attr,Object obj){ requests.get().getSession().setAttribute(attr,obj); } public Object getRequestValue(String attr){ return requests.get().getAttribute(attr); } public String getRequestURI(){ return requests.get().getRequestURI(); } public String getRequestIP(){ return getIpAddr(requests.get()); } public void set(HttpServletRequest request){ requests.set(request); } /** * 获取当前网络ip * @param request * @return */ public String getIpAddr(HttpServletRequest request){ String ipAddress = request.getHeader("x-forwarded-for"); if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("Proxy-Client-IP"); } if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("WL-Proxy-Client-IP"); } if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getRemoteAddr(); if(ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")){ //根据网卡取本机配置的IP InetAddress inet=null; try { inet = InetAddress.getLocalHost(); } catch (UnknownHostException e) { e.printStackTrace(); } ipAddress= inet.getHostAddress(); } } //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割 if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15 if(ipAddress.indexOf(",")>0){ ipAddress = ipAddress.substring(0,ipAddress.indexOf(",")); } } return ipAddress; } }