package com.fr.plugin; import com.fr.json.JSONObject; import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; import com.fr.third.jodd.util.collection.ArrayEnumeration; import com.fr.web.utils.WebUtils; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.*; public class XContentRequestWrapper extends HttpServletRequestWrapper { JSONObject jsonObject = null; public XContentRequestWrapper(HttpServletRequest request) { super(request); String header = request.getHeader("X-Context"); String url = WebUtils.getOriginalURL(request); try { if (StringUtils.isNotBlank(header)) { header = URLDecoder.decode(header, "UTF-8"); jsonObject = new JSONObject(header); FineLoggerFactory.getLogger().info("当前请求地址:{} \n X-Context :{} ", url, header); } else { FineLoggerFactory.getLogger().info("当前请求地址:{} 未携带 X-Context ", url); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } @Override public String getParameter(String name) { String parameter = super.getParameter(name); if (StringUtils.isBlank(parameter) && jsonObject != null) { return jsonObject.getString(name); } return parameter; } @Override public Map getParameterMap() { Map parameterMap = super.getParameterMap(); Map stringHashMap = new HashMap<>(); if (jsonObject != null) { Iterator keys = jsonObject.keys(); while (keys.hasNext()) { String key = keys.next(); Object value = jsonObject.getValue(key); if (value != null) { stringHashMap.put(key, new String[]{ value.toString() }); } } } stringHashMap.putAll(parameterMap); return stringHashMap; } @Override public Enumeration getParameterNames() { Enumeration parameterNames = super.getParameterNames(); if (jsonObject != null) { Iterator keys = jsonObject.keys(); ArrayList arrayList = new ArrayList<>(); while (keys.hasNext()) { String next = keys.next(); arrayList.add(next); } while (parameterNames.hasMoreElements()) { String s = parameterNames.nextElement(); arrayList.add(s); } ArrayEnumeration dayNames = new ArrayEnumeration(arrayList.toArray(new String[0])); return dayNames; } return parameterNames; } @Override public String[] getParameterValues(String name) { String[] parameterValues = super.getParameterValues(name); if (parameterValues == null && jsonObject != null) { Object stringObjectMap = jsonObject.getValue(name); if (stringObjectMap != null) { return new String[]{ stringObjectMap.toString() }; } } return parameterValues; } }