| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- package com.crm.rely.backend.util;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONObject;
- import com.crm.rely.backend.core.constant.Constants;
- import javax.servlet.ReadListener;
- import javax.servlet.ServletInputStream;
- import javax.servlet.ServletRequest;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletRequestWrapper;
- import java.io.*;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- public class GlobalHttpServletRequestWrapper extends HttpServletRequestWrapper {
- private HttpServletRequest orgRequest = null;
- private boolean isIncludeRichText;
- public GlobalHttpServletRequestWrapper(HttpServletRequest request, boolean isIncludeRichText) {
- super(request);
- orgRequest = request;
- this.isIncludeRichText = isIncludeRichText;
- }
- @Override
- public ServletInputStream getInputStream() throws IOException {
- String result = readBody(orgRequest);
- JSONObject jsonObject = JSON.parseObject(result);
- for (Map.Entry<String, Object> stringObjectEntry : jsonObject.entrySet()) {
- if (stringObjectEntry.getValue() instanceof String) {
- stringObjectEntry.setValue(clean(stringObjectEntry.getValue().toString()));
- }
- }
- String content=jsonObject.toJSONString();
- return new CustomServletInputStream(content);
- }
- public static String readBody(ServletRequest request) {
- StringBuilder sb = new StringBuilder();
- String inputLine;
- BufferedReader br = null;
- try {
- br = request.getReader();
- while ((inputLine = br.readLine()) != null) {
- sb.append(inputLine);
- }
- } catch (IOException e) {
- throw new RuntimeException("Failed users read body.", e);
- } finally {
- if (br != null) {
- try {
- br.close();
- } catch (IOException e) {
- }
- }
- }
- return sb.toString();
- }
- /**
- * 覆盖getParameter方法,将参数名和参数值都过滤。
- * 如果需要获得原始的值,则通过super.getParameterValues(name)来获取
- * getParameterNames,getParameterValues和getParameterMap也可能需要覆盖
- */
- @Override
- public String getParameter(String name) {
- Boolean flag = ("content".equals(name) || name.endsWith("WithHtml"));
- if (flag && !isIncludeRichText) {
- return super.getParameter(name);
- }
- name = clean(name);
- String value = super.getParameter(name);
- if (ValidateUtil.vStringNull(value)) {
- value = clean(value);
- }
- return value;
- }
- @Override
- public Map getParameterMap() {
- Map map = super.getParameterMap();
- // 返回值Map
- Map<String, String> returnMap = new HashMap<String, String>();
- Iterator entries = map.entrySet().iterator();
- Map.Entry entry;
- String name = "";
- String value = "";
- while (entries.hasNext()) {
- entry = (Map.Entry) entries.next();
- name = (String) entry.getKey();
- Object valueObj = entry.getValue();
- if (null == valueObj) {
- value = "";
- } else if (valueObj instanceof String[]) {
- String[] values = (String[]) valueObj;
- for (int i = 0; i < values.length; i++) {
- value = values[i] + ",";
- }
- value = value.substring(0, value.length() - 1);
- } else {
- value = valueObj.toString();
- }
- returnMap.put(name, clean(value).trim());
- }
- return returnMap;
- }
- @Override
- public String[] getParameterValues(String name) {
- String[] arr = super.getParameterValues(name);
- if (arr != null) {
- for (int i = 0; i < arr.length; i++) {
- arr[i] = clean(arr[i]);
- }
- }
- return arr;
- }
- /**
- * 覆盖getHeader方法,将参数名和参数值都过滤。
- * 如果需要获得原始的值,则通过super.getHeaders(name)来获取
- * getHeaderNames 也可能需要覆盖
- */
- @Override
- public String getHeader(String name) {
- name = clean(name);
- String value = super.getHeader(name);
- if (ValidateUtil.vStringNull(value)) {
- value = clean(value);
- }
- return value;
- }
- /**
- * 获取最原始的request
- *
- * @return
- */
- public HttpServletRequest getOrgRequest() {
- return orgRequest;
- }
- /**
- * 获取最原始的request的静态方法
- *
- * @return
- */
- public static HttpServletRequest getOrgRequest(HttpServletRequest req) {
- if (req instanceof GlobalHttpServletRequestWrapper) {
- return ((GlobalHttpServletRequestWrapper) req).getOrgRequest();
- }
- return req;
- }
- public String clean(String content) {
- String result = JsoupUtil.clean(content);
- if (SensitiveWordFilterUtil.getSensitiveWordMap() != null && SensitiveWordFilterUtil.getSensitiveWordMap().size() > 0) {
- result = SensitiveWordFilterUtil.replaceSensitiveWord(result, Constants.MIN_MACH_TYPE, "");
- }
- return result;
- }
- private class CustomServletInputStream extends ServletInputStream {
- private ByteArrayInputStream buffer;
- public CustomServletInputStream(String body) {
- body = body == null ? "" : body;
- this.buffer = new ByteArrayInputStream(body.getBytes());
- }
- @Override
- public int read() throws IOException {
- return buffer.read();
- }
- @Override
- public boolean isFinished() {
- return buffer.available() == 0;
- }
- @Override
- public boolean isReady() {
- return true;
- }
- @Override
- public void setReadListener(ReadListener listener) {
- throw new RuntimeException("Not implemented");
- }
- }
- }
|