Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.ai.smart.common.helper.util; import com.ai.smart.common.helper.util.constant.WebConstants; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.util.UrlPathHelper; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import java.util.StringTokenizer; import static com.ai.smart.common.helper.util.constant.WebConstants.POST; import static com.ai.smart.common.helper.util.constant.WebConstants.UTF8; /** * HttpServletRequest * * @author Administrator */ public class RequestUtils { private static final Logger log = LoggerFactory.getLogger(RequestUtils.class); /** * ?QueryString?URLDecoderUTF-8??post?? * HttpServletRequest#getParameter? * * @param request web * @param name ??? * @return */ public static String getQueryParam(HttpServletRequest request, String name) { if (StringUtils.isBlank(name)) { return null; } if (request.getMethod().equalsIgnoreCase(POST)) { return request.getParameter(name); } String s = request.getQueryString(); if (StringUtils.isBlank(s)) { return null; } try { s = URLDecoder.decode(s, UTF8); } catch (UnsupportedEncodingException e) { log.error("encoding " + UTF8 + " not support?", e); } String[] values = parseQueryString(s).get(name); if (values != null && values.length > 0) { return values[values.length - 1]; } else { return null; } } public static Integer getQueryParamInt(HttpServletRequest request, String name) { String val = request.getParameter(name); if (StringUtil.isNullorEmpty(val)) return 0; return Integer.valueOf(val); } public static Map<String, Object> getQueryParams(HttpServletRequest request) { Map<String, String[]> map; if (request.getMethod().equalsIgnoreCase(POST)) { map = request.getParameterMap(); } else { String s = request.getQueryString(); if (StringUtils.isBlank(s)) { return new HashMap<String, Object>(); } try { s = URLDecoder.decode(s, UTF8); } catch (UnsupportedEncodingException e) { log.error("encoding " + UTF8 + " not support?", e); } map = parseQueryString(s); } Map<String, Object> params = new HashMap<String, Object>(map.size()); int len; for (Map.Entry<String, String[]> entry : map.entrySet()) { len = entry.getValue().length; if (len == 1) { params.put(entry.getKey(), entry.getValue()[0]); } else if (len > 1) { params.put(entry.getKey(), entry.getValue()); } } return params; } public static Map<String, String[]> parseQueryString(String s) { String valArray[] = null; if (s == null) { throw new IllegalArgumentException(); } Map<String, String[]> ht = new HashMap<String, String[]>(); StringTokenizer st = new StringTokenizer(s, "&"); while (st.hasMoreTokens()) { String pair = (String) st.nextToken(); int pos = pair.indexOf('='); if (pos == -1) { continue; } String key = pair.substring(0, pos); String val = pair.substring(pos + 1, pair.length()); if (ht.containsKey(key)) { String oldVals[] = (String[]) ht.get(key); valArray = new String[oldVals.length + 1]; for (int i = 0; i < oldVals.length; i++) { valArray[i] = oldVals[i]; } valArray[oldVals.length] = val; } else { valArray = new String[1]; valArray[0] = val; } ht.put(key, valArray); } return ht; } public static Map<String, String> getRequestMap(HttpServletRequest request, String prefix) { return getRequestMap(request, prefix, false); } public static Map<String, String> getRequestMapWithPrefix(HttpServletRequest request, String prefix) { return getRequestMap(request, prefix, true); } private static Map<String, String> getRequestMap(HttpServletRequest request, String prefix, boolean nameWithPrefix) { Map<String, String> map = new HashMap<String, String>(); Enumeration<String> names = request.getParameterNames(); String name, key, value; while (names.hasMoreElements()) { name = names.nextElement(); if (name.startsWith(prefix)) { key = nameWithPrefix ? name : name.substring(prefix.length()); value = StringUtils.join(request.getParameterValues(name), ','); map.put(key, value); } } return map; } /** * ?IP * <p> * Request.getRemoteAddr()???nginx????? * <p> * Header?X-Real-IP??X-Forwarded-ForIP(,) * ?Request .getRemoteAddr() * * @param request * @return */ public static String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("X-Real-IP"); if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) { return ip; } ip = request.getHeader("X-Forwarded-For"); if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) { // ?????IPIP int index = ip.indexOf(','); if (index != -1) { return ip.substring(0, index); } else { return ip; } } else { return request.getRemoteAddr(); } } /** * * <p> * HttpServletRequest.getRequestURL+"?"+HttpServletRequest.getQueryString * * @param request * @return */ public static String getLocation(HttpServletRequest request) { UrlPathHelper helper = new UrlPathHelper(); StringBuffer buff = request.getRequestURL(); String uri = request.getRequestURI(); String origUri = helper.getOriginatingRequestUri(request); buff.replace(buff.length() - uri.length(), buff.length(), origUri); String queryString = helper.getOriginatingQueryString(request); if (queryString != null) { buff.append("?").append(queryString); } return buff.toString(); } }