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.
98 lines
3.4 KiB
98 lines
3.4 KiB
3 years ago
|
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;
|
||
|
}
|
||
|
}
|