|
@@ -0,0 +1,187 @@
|
|
|
+package org.jeecg.config.sign.util;
|
|
|
+
|
|
|
+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;
|
|
|
+
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.jeecg.common.constant.SymbolConstant;
|
|
|
+import org.jeecg.common.util.oConvertUtils;
|
|
|
+import org.springframework.http.HttpMethod;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+
|
|
|
+/**
|
|
|
+ * http 工具类 获取请求中的参数
|
|
|
+ *
|
|
|
+ * @author jeecg
|
|
|
+ * @date 20210621
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+public class HttpUtils {
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将URL的参数和body参数合并
|
|
|
+ *
|
|
|
+ * @author jeecg
|
|
|
+ * @date 20210621
|
|
|
+ * @param request
|
|
|
+ */
|
|
|
+ public static SortedMap<String, String> getAllParams(HttpServletRequest request) throws IOException {
|
|
|
+
|
|
|
+ SortedMap<String, String> result = new TreeMap<>();
|
|
|
+ // 获取URL上最后带逗号的参数变量 sys/dict/getDictItems/sys_user,realname,username
|
|
|
+ String pathVariable = request.getRequestURI().substring(request.getRequestURI().lastIndexOf("/") + 1);
|
|
|
+ if (pathVariable.contains(SymbolConstant.COMMA)) {
|
|
|
+ log.info(" pathVariable: {}",pathVariable);
|
|
|
+ String deString = URLDecoder.decode(pathVariable, "UTF-8");
|
|
|
+ log.info(" pathVariable decode: {}",deString);
|
|
|
+ result.put(SignUtil.X_PATH_VARIABLE, deString);
|
|
|
+ }
|
|
|
+ // 获取URL上的参数
|
|
|
+ Map<String, String> urlParams = getUrlParams(request);
|
|
|
+ for (Map.Entry entry : urlParams.entrySet()) {
|
|
|
+ result.put((String)entry.getKey(), (String)entry.getValue());
|
|
|
+ }
|
|
|
+ Map<String, String> 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<String, String> getAllParams(String url, String queryString, byte[] body, String method)
|
|
|
+ throws IOException {
|
|
|
+
|
|
|
+ SortedMap<String, String> result = new TreeMap<>();
|
|
|
+ // 获取URL上最后带逗号的参数变量 sys/dict/getDictItems/sys_user,realname,username
|
|
|
+ String pathVariable = url.substring(url.lastIndexOf("/") + 1);
|
|
|
+ if (pathVariable.contains(SymbolConstant.COMMA)) {
|
|
|
+ log.info(" pathVariable: {}",pathVariable);
|
|
|
+ String deString = URLDecoder.decode(pathVariable, "UTF-8");
|
|
|
+ log.info(" pathVariable decode: {}",deString);
|
|
|
+ result.put(SignUtil.X_PATH_VARIABLE, deString);
|
|
|
+ }
|
|
|
+ // 获取URL上的参数
|
|
|
+ Map<String, String> urlParams = getUrlParams(queryString);
|
|
|
+ for (Map.Entry entry : urlParams.entrySet()) {
|
|
|
+ result.put((String)entry.getKey(), (String)entry.getValue());
|
|
|
+ }
|
|
|
+ Map<String, String> 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<String, String> 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<String, String> 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<String, String> getUrlParams(HttpServletRequest request) {
|
|
|
+ Map<String, String> 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<String, String> getUrlParams(String queryString) {
|
|
|
+ Map<String, String> 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;
|
|
|
+ }
|
|
|
+}
|