You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
3.4 KiB
97 lines
3.4 KiB
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<String, String[]> getParameterMap() { |
|
Map<String, String[]> parameterMap = super.getParameterMap(); |
|
Map<String, String[]> stringHashMap = new HashMap<>(); |
|
if (jsonObject != null) { |
|
Iterator<String> 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<String> getParameterNames() { |
|
Enumeration<String> parameterNames = super.getParameterNames(); |
|
if (jsonObject != null) { |
|
Iterator<String> keys = jsonObject.keys(); |
|
ArrayList<String> arrayList = new ArrayList<>(); |
|
while (keys.hasNext()) { |
|
String next = keys.next(); |
|
arrayList.add(next); |
|
} |
|
while (parameterNames.hasMoreElements()) { |
|
String s = parameterNames.nextElement(); |
|
arrayList.add(s); |
|
} |
|
ArrayEnumeration<String> dayNames = new ArrayEnumeration<String>(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; |
|
} |
|
}
|
|
|