package org.jeecg.config.sign.util; import com.alibaba.fastjson.JSONObject; import org.jeecg.common.util.oConvertUtils; import org.springframework.http.HttpMethod; import javax.servlet.http.HttpServletRequest; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.HashMap; import java.util.Map; import java.util.SortedMap; import java.util.TreeMap; /** * http 工具类 获取请求中的参数 * * @author jeecg * @date 20210621 */ public class HttpUtils { /** * 将URL的参数和body参数合并 * * @author jeecg * @date 20210621 * @param request */ public static SortedMap getAllParams(HttpServletRequest request) throws IOException { SortedMap result = new TreeMap<>(); // 获取URL上最后带逗号的参数变量 sys/dict/getDictItems/sys_user,realname,username String pathVariable = request.getRequestURI().substring(request.getRequestURI().lastIndexOf("/") + 1); if (pathVariable.contains(",")) { result.put(SignUtil.xPathVariable, pathVariable); } // 获取URL上的参数 Map urlParams = getUrlParams(request); for (Map.Entry entry : urlParams.entrySet()) { result.put((String)entry.getKey(), (String)entry.getValue()); } Map allRequestParam = new HashMap<>(16); // get请求不需要拿body参数 if (!HttpMethod.GET.name().equals(request.getMethod())) { allRequestParam = getAllRequestParam(request); } // 将URL的参数和body参数进行合并 if (allRequestParam != null) { for (Map.Entry entry : allRequestParam.entrySet()) { result.put((String)entry.getKey(), (String)entry.getValue()); } } return result; } /** * 将URL的参数和body参数合并 * * @author jeecg * @date 20210621 * @param queryString */ public static SortedMap getAllParams(String url, String queryString, byte[] body, String method) throws IOException { SortedMap result = new TreeMap<>(); // 获取URL上最后带逗号的参数变量 sys/dict/getDictItems/sys_user,realname,username String pathVariable = url.substring(url.lastIndexOf("/") + 1); if (pathVariable.contains(",")) { result.put(SignUtil.xPathVariable, pathVariable); } // 获取URL上的参数 Map urlParams = getUrlParams(queryString); for (Map.Entry entry : urlParams.entrySet()) { result.put((String)entry.getKey(), (String)entry.getValue()); } Map allRequestParam = new HashMap<>(16); // get请求不需要拿body参数 if (!HttpMethod.GET.name().equals(method)) { allRequestParam = getAllRequestParam(body); } // 将URL的参数和body参数进行合并 if (allRequestParam != null) { for (Map.Entry entry : allRequestParam.entrySet()) { result.put((String)entry.getKey(), (String)entry.getValue()); } } return result; } /** * 获取 Body 参数 * * @date 15:04 20210621 * @param request */ public static Map getAllRequestParam(final HttpServletRequest request) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream())); String str = ""; StringBuilder wholeStr = new StringBuilder(); // 一行一行的读取body体里面的内容; while ((str = reader.readLine()) != null) { wholeStr.append(str); } // 转化成json对象 return JSONObject.parseObject(wholeStr.toString(), Map.class); } /** * 获取 Body 参数 * * @date 15:04 20210621 * @param body */ public static Map getAllRequestParam(final byte[] body) throws IOException { if(body==null){ return null; } String wholeStr = new String(body); // 转化成json对象 return JSONObject.parseObject(wholeStr.toString(), Map.class); } /** * 将URL请求参数转换成Map * * @param request */ public static Map getUrlParams(HttpServletRequest request) { Map result = new HashMap<>(16); if (oConvertUtils.isEmpty(request.getQueryString())) { return result; } String param = ""; try { param = URLDecoder.decode(request.getQueryString(), "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } String[] params = param.split("&"); for (String s : params) { int index = s.indexOf("="); result.put(s.substring(0, index), s.substring(index + 1)); } return result; } /** * 将URL请求参数转换成Map * * @param queryString */ public static Map getUrlParams(String queryString) { Map result = new HashMap<>(16); if (oConvertUtils.isEmpty(queryString)) { return result; } String param = ""; try { param = URLDecoder.decode(queryString, "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } String[] params = param.split("&"); for (String s : params) { int index = s.indexOf("="); result.put(s.substring(0, index), s.substring(index + 1)); } return result; } }