1 package com.pc.core.util; 2 3 import java.net.MalformedURLException; 4 import java.net.URL; 5 6 import javax.servlet.http.Cookie; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 10 import org.apache.commons.beanutils.ConvertUtils; 11 import org.apache.commons.lang.StringUtils; 12 import org.apache.commons.lang.math.NumberUtils; 13 /** 14 * RequestUtils 这个类主要是用来获取关于请求的一些信息的工具类 15 * @author YUNFENCGHENG 16 * 2011-9-19 下午04:36:22 17 */ 18 public class RequestUtils { 19 20 /** 21 * 获取客户端IP地址,此方法用在proxy环境中 22 * @param req 23 * @return 24 */ 25 public static String getRemoteAddr(HttpServletRequest req) { 26 String ip = req.getHeader("X-Forwarded-For"); 27 if(StringUtils.isNotBlank(ip)){ 28 String[] ips = StringUtils.split(ip,','); 29 if(ips!=null){ 30 for(String tmpip : ips){ 31 if(StringUtils.isBlank(tmpip)) 32 continue; 33 tmpip = tmpip.trim(); 34 if(isIPAddr(tmpip) && !tmpip.startsWith("10.") && !tmpip.startsWith("192.168.") && !"127.0.0.1".equals(tmpip)){ 35 return tmpip.trim(); 36 } 37 } 38 } 39 } 40 ip = req.getHeader("x-real-ip"); 41 if(isIPAddr(ip)) 42 return ip; 43 ip = req.getRemoteAddr(); 44 if(ip.indexOf('.')==-1) 45 ip = "127.0.0.1"; 46 return ip; 47 } 48 49 /** 50 * 判断是否为搜索引擎 51 * @param req 52 * @return 53 */ 54 public static boolean isRobot(HttpServletRequest req){ 55 String ua = req.getHeader("user-agent"); 56 if(StringUtils.isBlank(ua)) return false; 57 return (ua != null 58 && (ua.indexOf("Baiduspider") != -1 || ua.indexOf("Googlebot") != -1 59 || ua.indexOf("sogou") != -1 60 || ua.indexOf("sina") != -1 61 || ua.indexOf("iaskspider") != -1 62 || ua.indexOf("ia_archiver") != -1 63 || ua.indexOf("Sosospider") != -1 64 || ua.indexOf("YoudaoBot") != -1 65 || ua.indexOf("yahoo") != -1 66 || ua.indexOf("yodao") != -1 67 || ua.indexOf("MSNBot") != -1 68 || ua.indexOf("spider") != -1 69 || ua.indexOf("Twiceler") != -1 70 || ua.indexOf("Sosoimagespider") != -1 71 || ua.indexOf("naver.com/robots") != -1 72 || ua.indexOf("Nutch") != -1 73 || ua.indexOf("spider") != -1)); 74 } 75 76 /** 77 * 获取COOKIE 78 * 79 * @param name 80 */ 81 public static Cookie getCookie(HttpServletRequest request, String name) { 82 Cookie[] cookies = request.getCookies(); 83 if(cookies == null) return null; 84 for (Cookie ck : cookies) { 85 if (StringUtils.equalsIgnoreCase(name,ck.getName())) 86 return ck; 87 } 88 return null; 89 } 90 91 /** 92 * 获取COOKIE 93 * 94 * @param name 95 */ 96 public static String getCookieValue(HttpServletRequest request, String name) { 97 Cookie[] cookies = request.getCookies(); 98 if(cookies == null) return null; 99 for (Cookie ck : cookies) {100 if (StringUtils.equalsIgnoreCase(name,ck.getName())) 101 return ck.getValue(); 102 }103 return null;104 }105 106 /**107 * 设置COOKIE108 * 109 * @param name110 * @param value111 * @param maxAge112 */113 public static void setCookie(HttpServletRequest request, HttpServletResponse response, String name,114 String value, int maxAge) {115 setCookie(request,response,name,value,maxAge,true);116 }117 118 /**119 * 设置COOKIE120 * 121 * @param name122 * @param value123 * @param maxAge124 */125 public static void setCookie(HttpServletRequest request, HttpServletResponse response, String name,126 String value, int maxAge, boolean all_sub_domain) {127 Cookie cookie = new Cookie(name, value);128 cookie.setMaxAge(maxAge);129 if(all_sub_domain){130 String serverName = request.getServerName();131 String domain = getDomainOfServerName(serverName);132 if(domain!=null && domain.indexOf('.')!=-1){133 cookie.setDomain('.' + domain);134 }135 }136 cookie.setPath("/");137 response.addCookie(cookie);138 }139 140 public static void deleteCookie(HttpServletRequest request,141 HttpServletResponse response, String name, boolean all_sub_domain) {142 setCookie(request,response,name,"",0,all_sub_domain);143 }144 145 /**146 * 获取用户访问URL中的根域名147 * 例如: www.dlog.cn -> dlog.cn148 * @param req149 * @return150 */151 public static String getDomainOfServerName(String host){152 if(isIPAddr(host))153 return null;154 String[] names = StringUtils.split(host, '.');155 int len = names.length;156 if(len==1) return null;157 if(len==3){158 return makeup(names[len-2],names[len-1]);159 }160 if(len>3){161 String dp = names[len-2];162 if(dp.equalsIgnoreCase("com")||dp.equalsIgnoreCase("gov")||dp.equalsIgnoreCase("net")||dp.equalsIgnoreCase("edu")||dp.equalsIgnoreCase("org"))163 return makeup(names[len-3],names[len-2],names[len-1]);164 else165 return makeup(names[len-2],names[len-1]);166 }167 return host;168 }169 170 /**171 * 判断字符串是否是一个IP地址172 * @param addr173 * @return174 */175 public static boolean isIPAddr(String addr){176 if(StringUtils.isEmpty(addr))177 return false;178 String[] ips = StringUtils.split(addr, '.');179 if(ips.length != 4)180 return false;181 try{182 int ipa = Integer.parseInt(ips[0]);183 int ipb = Integer.parseInt(ips[1]);184 int ipc = Integer.parseInt(ips[2]);185 int ipd = Integer.parseInt(ips[3]);186 return ipa >= 0 && ipa <= 255 && ipb >= 0 && ipb <= 255 && ipc >= 0187 && ipc <= 255 && ipd >= 0 && ipd <= 255;188 }catch(Exception e){}189 return false;190 }191 192 private static String makeup(String...ps){193 StringBuilder s = new StringBuilder();194 for(int idx = 0; idx < ps.length; idx++){195 if(idx > 0)196 s.append('.');197 s.append(ps[idx]);198 }199 return s.toString();200 }201 202 /**203 * 获取HTTP端口204 * @param req205 * @return206 * @throws MalformedURLException207 */208 public static int getHttpPort(HttpServletRequest req) {209 try {210 return new URL(req.getRequestURL().toString()).getPort();211 } catch (MalformedURLException excp) {212 return 80;213 }214 } 215 216 /**217 * 获取浏览器提交的整形参数218 * @param param219 * @param defaultValue220 * @return221 */222 public static int getParam(HttpServletRequest req, String param, int defaultValue){223 return NumberUtils.toInt(req.getParameter(param), defaultValue);224 }225 /**226 * 获取浏览器提交的整形参数227 * @param param228 * @param defaultValue229 * @return230 */231 public static long getParam(HttpServletRequest req, String param, long defaultValue){232 return NumberUtils.toLong(req.getParameter(param), defaultValue);233 }234 235 public static long[] getParamValues(HttpServletRequest req, String name){236 String[] values = req.getParameterValues(name);237 if(values==null) return null;238 return (long[])ConvertUtils.convert(values, long.class);239 }