博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HttpServletRequest 工具类
阅读量:5946 次
发布时间:2019-06-19

本文共 7728 字,大约阅读时间需要 25 分钟。

1 package com.gta.yyyf.commons.utils;  2   3 import java.io.UnsupportedEncodingException;  4 import java.net.URLDecoder;  5 import java.util.Enumeration;  6 import java.util.HashMap;  7 import java.util.Map;  8 import java.util.StringTokenizer;  9  10 import javax.servlet.http.HttpServletRequest; 11  12 import org.apache.commons.lang3.StringUtils; 13 import org.apache.commons.logging.Log; 14 import org.apache.commons.logging.LogFactory; 15  16 /** 17  *  18  * 功能描述:HttpServletRequest 工具类 19  * 20  * @author biyun.huang 21  * 22  *         

23 * 修改历史:(修改人,修改时间,修改原因/内容) 24 *

25 */ 26 public class RequestUtils { 27 28 private static final Log logger = LogFactory.getLog(RequestUtils.class); 29 public static final String POST = "POST"; 30 31 public static final String UTF8 = "UTF-8"; 32 public static final String GET = "GET"; 33 34 /** 35 * 获取QueryString的参数,并使用URLDecoder以UTF-8格式转码。如果请求是以post方法提交的, 36 * 那么将通过HttpServletRequest#getParameter获取。 37 * 38 * @param request 39 * web请求 40 * @param name 41 * 参数名称 42 * @return 43 */ 44 public static String getQueryParam(HttpServletRequest request, String name) { 45 if (StringUtils.isBlank(name)) { 46 return null; 47 } 48 if (request.getMethod().equalsIgnoreCase(POST)) { 49 return request.getParameter(name); 50 } 51 String s = request.getQueryString(); 52 if (StringUtils.isBlank(s)) { 53 return null; 54 } 55 try { 56 s = URLDecoder.decode(s, UTF8); 57 } catch (UnsupportedEncodingException e) { 58 logger.error("encoding " + UTF8 + " not support?", e); 59 } 60 String[] values = parseQueryString(s).get(name); 61 if (values != null && values.length > 0) { 62 return values[values.length - 1]; 63 } else { 64 return null; 65 } 66 } 67 68 public static Map
getQueryParams(HttpServletRequest request) { 69 Map
map; 70 if (request.getMethod().equalsIgnoreCase(POST)) { 71 map = request.getParameterMap(); 72 } else { 73 String s = request.getQueryString(); 74 if (StringUtils.isBlank(s)) { 75 return new HashMap
(); 76 } 77 try { 78 s = URLDecoder.decode(s, UTF8); 79 } catch (UnsupportedEncodingException e) { 80 logger.error("encoding " + UTF8 + " not support?", e); 81 } 82 map = parseQueryString(s); 83 } 84 85 Map
params = new HashMap
(map.size()); 86 int len; 87 for (Map.Entry
entry : map.entrySet()) { 88 len = entry.getValue().length; 89 if (len == 1) { 90 params.put(entry.getKey(), entry.getValue()[0]); 91 } else if (len > 1) { 92 params.put(entry.getKey(), entry.getValue()); 93 } 94 } 95 return params; 96 } 97 98 /** 99 * 100 * Parses a query string passed from the client to the server and builds a101 *
HashTable object with key-value pairs. The query string102 * should be in the form of a string packaged by the GET or POST method,103 * that is, it should have key-value pairs in the form
key=value,104 * with each pair separated from the next by a & character.105 * 106 *

107 * A key can appear more than once in the query string with different108 * values. However, the key appears only once in the hashtable, with its109 * value being an array of strings containing the multiple values sent by110 * the query string.111 * 112 *

113 * The keys and values in the hashtable are stored in their decoded form, so114 * any + characters are converted to spaces, and characters sent in115 * hexadecimal notation (like %xx) are converted to ASCII characters.116 * 117 * @param s118 * a string containing the query to be parsed119 * 120 * @return a HashTable object built from the parsed key-value121 * pairs122 * 123 * @exception IllegalArgumentException124 * if the query string is invalid125 * 126 */127 public static Map

parseQueryString(String s) {128 String valArray[] = null;129 if (s == null) {130 throw new IllegalArgumentException();131 }132 Map
ht = new HashMap
();133 StringTokenizer st = new StringTokenizer(s, "&");134 while (st.hasMoreTokens()) {135 String pair = (String) st.nextToken();136 int pos = pair.indexOf('=');137 if (pos == -1) {138 continue;139 }140 String key = pair.substring(0, pos);141 String val = pair.substring(pos + 1, pair.length());142 if (ht.containsKey(key)) {143 String oldVals[] = (String[]) ht.get(key);144 valArray = new String[oldVals.length + 1];145 for (int i = 0; i < oldVals.length; i++) {146 valArray[i] = oldVals[i];147 }148 valArray[oldVals.length] = val;149 } else {150 valArray = new String[1];151 valArray[0] = val;152 }153 ht.put(key, valArray);154 }155 return ht;156 }157 158 public static Map
getRequestMap(HttpServletRequest request,159 String prefix) {160 return getRequestMap(request, prefix, false);161 }162 163 public static Map
getRequestMapWithPrefix(164 HttpServletRequest request, String prefix) {165 return getRequestMap(request, prefix, true);166 }167 168 private static Map
getRequestMap(169 HttpServletRequest request, String prefix, boolean nameWithPrefix) {170 Map
map = new HashMap
();171 Enumeration
names = request.getParameterNames();172 String name, key, value;173 while (names.hasMoreElements()) {174 name = names.nextElement();175 if (name.startsWith(prefix)) {176 key = nameWithPrefix ? name : name.substring(prefix.length());177 value = StringUtils.join(request.getParameterValues(name), ',');178 map.put(key, value);179 }180 }181 return map;182 }183 184 /**185 * 获取访问者IP186 * 187 * 在一般情况下使用Request.getRemoteAddr()即可,但是经过nginx等反向代理软件后,这个方法会失效�?188 * 189 * 本方法先从Header中获取X-Real-IP,如果不存在再从X-Forwarded-For获得第一个IP(�?分割)�?190 * 如果还不存在则调用Request .getRemoteAddr()�?191 * 192 * @param request193 * @return194 */195 public static String getIpAddr(HttpServletRequest request) {196 String ip = request.getHeader("X-Real-IP");197 if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {198 return ip;199 }200 ip = request.getHeader("X-Forwarded-For");201 if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {202 203 int index = ip.indexOf(',');204 if (index != -1) {205 return ip.substring(0, index);206 } else {207 return ip;208 }209 } else {210 return request.getRemoteAddr();211 }212 }213 214 @SuppressWarnings("unused")215 private static String cleanXSS(String value) {216 // You'll need to remove the spaces from the html entities below217 value = value.replaceAll("<", "<").replaceAll(">", ">");218 value = value.replaceAll("\\(", "(").replaceAll("\\)", ")");219 value = value.replaceAll("'", "'");220 value = value.replaceAll("\"", """);// by:wgc221 value = value.replaceAll("eval\\((.*)\\)", "");222 value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']",223 "\"\"");224 value = value.replaceAll("script", "");225 return value;226 }227 228 public static String[] getQueryParamValues(HttpServletRequest request,229 String name) {230 if (StringUtils.isBlank(name)) {231 return null;232 }233 if (request.getMethod().equalsIgnoreCase(POST)) {234 return request.getParameterValues(name);235 } else {236 return null;237 }238 }239 240 public static void main(String[] args) {241 try {242 System.out.println(URLDecoder.decode("%E6%B7%B1%E5%9C%B3", UTF8));243 } catch (UnsupportedEncodingException e) {244 logger.error(e);245 e.printStackTrace();246 }247 }248 }

 

转载于:https://www.cnblogs.com/fuhengheng/p/8251496.html

你可能感兴趣的文章
spring 注入方式
查看>>
FileZilla Client 3.42.0 beta1 发布,流行的 FTP 解决方案
查看>>
深度学习之迁移学习介绍与使用
查看>>
Qt学习笔记(一)-文件目录与术语解释
查看>>
IDEA 自动导入包
查看>>
源发行版1.8 需要目标发行版1.8(解决亲身测)
查看>>
VR热播:VR 剧集以及及大量精彩VR视频
查看>>
MongoDB、Hbase、Redis等NoSQL优劣势、应用场景
查看>>
求职简历-机器学习工程师V2
查看>>
《数据科学家访谈录》总结·2
查看>>
如何打造智能汽车?比亚迪、沃尔沃等产学研领域专家详解汽车智造 | 2018全球智能驾驶峰会...
查看>>
JSP页面跳转
查看>>
我的公众号的排版
查看>>
利用stream对map集合进行过滤
查看>>
一点Java学习的相关资源
查看>>
13.0、python递归函数
查看>>
Spring Framework 5.1 正式发布
查看>>
Recover Binary Search Tree@LeetCode
查看>>
http2-frame -CONTINUATION
查看>>
基于Yar的WordPress微博墙插件
查看>>