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.
109 lines
3.7 KiB
109 lines
3.7 KiB
3 years ago
|
package com.fr.plugin;
|
||
|
|
||
|
import com.fr.decision.fun.impl.AbstractGlobalRequestFilterProvider;
|
||
|
import com.fr.json.JSONObject;
|
||
|
import com.fr.log.FineLoggerFactory;
|
||
|
import com.fr.stable.StringUtils;
|
||
|
|
||
|
import javax.servlet.FilterChain;
|
||
|
import javax.servlet.FilterConfig;
|
||
|
import javax.servlet.ServletException;
|
||
|
import javax.servlet.http.HttpServletRequest;
|
||
|
import javax.servlet.http.HttpServletResponse;
|
||
|
import java.io.IOException;
|
||
|
import java.io.PrintWriter;
|
||
|
import java.io.StringWriter;
|
||
|
import java.io.UnsupportedEncodingException;
|
||
|
import java.net.URLDecoder;
|
||
|
import java.util.Iterator;
|
||
|
|
||
|
public class DataFilterPlaceHolder extends AbstractGlobalRequestFilterProvider {
|
||
|
@Override
|
||
|
public String filterName() {
|
||
|
return "a1data";
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public String[] urlPatterns() {
|
||
|
return new String[]{
|
||
|
"/*"
|
||
|
};
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void init(FilterConfig filterConfig) {
|
||
|
FilterMeConfig.getInstance();
|
||
|
super.init(filterConfig);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public void doFilter(HttpServletRequest request, HttpServletResponse httpServletResponse, FilterChain filterChain) {
|
||
|
if (request.getMethod().equalsIgnoreCase("POST")) {
|
||
|
if (request.getPathInfo() != null && request.getPathInfo().endsWith("v5/design/widget/data")) {
|
||
|
String header = request.getHeader("X-Context");
|
||
|
if (StringUtils.isNotBlank(header)) {
|
||
|
RequestWrapper wrapper = new RequestWrapper(request);
|
||
|
String bodyString = wrapper.getBodyString();
|
||
|
JSONObject entries = new JSONObject(bodyString);
|
||
|
try {
|
||
|
delJSON(header, entries);
|
||
|
// FineLoggerFactory.getLogger().info("设置到body中 :{}", entries);
|
||
|
wrapper.setBody(entries.toString().getBytes());
|
||
|
filterChain.doFilter(wrapper, httpServletResponse);
|
||
|
} catch (IOException e) {
|
||
|
printException2FrLog(e);
|
||
|
} catch (ServletException e) {
|
||
|
printException2FrLog(e);
|
||
|
}
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
try {
|
||
|
filterChain.doFilter(request, httpServletResponse);
|
||
|
} catch (IOException e) {
|
||
|
printException2FrLog(e);
|
||
|
} catch (ServletException e) {
|
||
|
printException2FrLog(e);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void delJSON(String head, JSONObject req) {
|
||
|
try {
|
||
|
head = URLDecoder.decode(head, "UTF-8");
|
||
|
} catch (UnsupportedEncodingException e) {
|
||
|
e.printStackTrace();
|
||
|
}
|
||
|
FineLoggerFactory.getLogger().error("收到的 Context:{}", head);
|
||
|
JSONObject jsonObject = new JSONObject(head);
|
||
|
Iterator<String> keys = jsonObject.keys();
|
||
|
if (req.has("parameter")) {
|
||
|
JSONObject parameter = req.getJSONObject("parameter");
|
||
|
while (keys.hasNext()) {
|
||
|
String key = keys.next();
|
||
|
String value = jsonObject.getString(key);
|
||
|
if (!parameter.has(key)) {
|
||
|
setData(key, value, parameter);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
private void setData(String name, String data, JSONObject parameter) {
|
||
|
JSONObject jsonObject = new JSONObject();
|
||
|
jsonObject.put("type", 97);//URL参数
|
||
|
jsonObject.put("value", data);
|
||
|
parameter.put(name, jsonObject);
|
||
|
}
|
||
|
|
||
|
public static void printException2FrLog(Throwable e) {
|
||
|
StringWriter writer = new StringWriter();
|
||
|
e.printStackTrace(new PrintWriter(writer));
|
||
|
String s = writer.toString();
|
||
|
FineLoggerFactory.getLogger().error("错误:{}", s);
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|