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 * 设置COOKIE
108 *
109 * @param name
110 * @param value
111 * @param maxAge
112 */
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 * 设置COOKIE
120 *
121 * @param name
122 * @param value
123 * @param maxAge
124 */
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.cn
148 * @param req
149 * @return
150 */
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 else
165 return makeup(names[len-2],names[len-1]);
166 }
167 return host;
168 }
169
170 /**
171 * 判断字符串是否是一个IP地址
172 * @param addr
173 * @return
174 */
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 >= 0
187 && 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 req
205 * @return
206 * @throws MalformedURLException
207 */
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 param
219 * @param defaultValue
220 * @return
221 */
222 public static int getParam(HttpServletRequest req, String param, int defaultValue){
223 return NumberUtils.toInt(req.getParameter(param), defaultValue);
224 }
225 /**
226 * 获取浏览器提交的整形参数
227 * @param param
228 * @param defaultValue
229 * @return
230 */
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 }