JSD-7963 复合单点登录+登录时增量更新用户组织和权限信息
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

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;
}
}