XssHttpServletRequestWrapper.java 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package com.imed.costaccount.common.xss;
  2. import cn.hutool.core.util.StrUtil;
  3. import cn.hutool.http.HtmlUtil;
  4. import cn.hutool.json.JSONUtil;
  5. import javax.servlet.ReadListener;
  6. import javax.servlet.ServletInputStream;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletRequestWrapper;
  9. import java.io.*;
  10. import java.nio.charset.Charset;
  11. import java.util.LinkedHashMap;
  12. import java.util.Map;
  13. public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
  14. public XssHttpServletRequestWrapper(HttpServletRequest request) {
  15. super(request);
  16. }
  17. @Override
  18. public String getParameter(String name) {
  19. String value = super.getParameter(name);
  20. if (!StrUtil.hasEmpty(value)) {
  21. value = HtmlUtil.filter(value);
  22. }
  23. return value;
  24. }
  25. @Override
  26. public String[] getParameterValues(String name) {
  27. String[] values = super.getParameterValues(name);
  28. if (values != null) {
  29. for (int i = 0; i < values.length; i++) {
  30. String value = values[i];
  31. if (!StrUtil.hasEmpty(value)) {
  32. value = HtmlUtil.filter(value);
  33. }
  34. values[i] = value;
  35. }
  36. }
  37. return values;
  38. }
  39. @Override
  40. public Map<String, String[]> getParameterMap() {
  41. Map<String, String[]> parameters = super.getParameterMap();
  42. LinkedHashMap<String, String[]> map = new LinkedHashMap();
  43. if (parameters != null) {
  44. for (String key : parameters.keySet()) {
  45. String[] values = parameters.get(key);
  46. for (int i = 0; i < values.length; i++) {
  47. String value = values[i];
  48. if (!StrUtil.hasEmpty(value)) {
  49. value = HtmlUtil.filter(value);
  50. }
  51. values[i] = value;
  52. }
  53. map.put(key, values);
  54. }
  55. }
  56. return map;
  57. }
  58. @Override
  59. public String getHeader(String name) {
  60. String value = super.getHeader(name);
  61. if (!StrUtil.hasEmpty(value)) {
  62. value = HtmlUtil.filter(value);
  63. }
  64. return value;
  65. }
  66. @Override
  67. public ServletInputStream getInputStream() throws IOException {
  68. InputStream in = super.getInputStream();
  69. InputStreamReader reader = new InputStreamReader(in, Charset.forName("UTF-8"));
  70. BufferedReader buffer = new BufferedReader(reader);
  71. StringBuffer body = new StringBuffer();
  72. String line = buffer.readLine();
  73. while (line != null) {
  74. body.append(line);
  75. line = buffer.readLine();
  76. }
  77. buffer.close();
  78. reader.close();
  79. in.close();
  80. Map<String, Object> map = JSONUtil.parseObj(body.toString());
  81. Map<String, Object> result = new LinkedHashMap<>();
  82. for (String key : map.keySet()) {
  83. Object val = map.get(key);
  84. if (val instanceof String) {
  85. if (!StrUtil.hasEmpty(val.toString())) {
  86. result.put(key, HtmlUtil.filter(val.toString()));
  87. }
  88. } else {
  89. result.put(key, val);
  90. }
  91. }
  92. String json = JSONUtil.toJsonStr(result);
  93. ByteArrayInputStream bain = new ByteArrayInputStream(json.getBytes());
  94. return new ServletInputStream() {
  95. @Override
  96. public int read() throws IOException {
  97. return bain.read();
  98. }
  99. @Override
  100. public boolean isFinished() {
  101. return false;
  102. }
  103. @Override
  104. public boolean isReady() {
  105. return false;
  106. }
  107. @Override
  108. public void setReadListener(ReadListener readListener) {
  109. }
  110. };
  111. }
  112. }