From f7feb0b1ac1fc9b4a32645ad16f242e67f61e5f6 Mon Sep 17 00:00:00 2001 From: life <1733802689@qq.com> Date: Sat, 7 Oct 2023 15:00:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug=EF=BC=8C=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E9=87=8D=E5=A4=8D=E6=8F=90=E4=BA=A4=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/bwie/Filter/XssFilter.java | 35 +++++++++++ .../config/XssHttpServletRequestWrapper.java | 57 ++++++++++++++++++ .../bwie/utils/HttpServletRequestReader.java | 35 +++++++++++ .../classes/com/bwie/Filter/XssFilter.class | Bin 0 -> 1368 bytes .../XssHttpServletRequestWrapper$1.class | Bin 0 -> 1233 bytes .../config/XssHttpServletRequestWrapper.class | Bin 0 -> 1790 bytes .../bwie/utils/HttpServletRequestReader.class | Bin 0 -> 1514 bytes target/demo11-3.6.0.jar | Bin 0 -> 17517 bytes 8 files changed, 127 insertions(+) create mode 100644 src/main/java/com/bwie/Filter/XssFilter.java create mode 100644 src/main/java/com/bwie/config/XssHttpServletRequestWrapper.java create mode 100644 src/main/java/com/bwie/utils/HttpServletRequestReader.java create mode 100644 target/classes/com/bwie/Filter/XssFilter.class create mode 100644 target/classes/com/bwie/config/XssHttpServletRequestWrapper$1.class create mode 100644 target/classes/com/bwie/config/XssHttpServletRequestWrapper.class create mode 100644 target/classes/com/bwie/utils/HttpServletRequestReader.class create mode 100644 target/demo11-3.6.0.jar diff --git a/src/main/java/com/bwie/Filter/XssFilter.java b/src/main/java/com/bwie/Filter/XssFilter.java new file mode 100644 index 0000000..687b2ef --- /dev/null +++ b/src/main/java/com/bwie/Filter/XssFilter.java @@ -0,0 +1,35 @@ +package com.bwie.Filter; + +import com.bwie.config.XssHttpServletRequestWrapper; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; + +public class XssFilter implements Filter { + @Override + public void init(FilterConfig filterConfig) throws ServletException { + + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + ServletRequest requestWrapper = null; + if(request instanceof HttpServletRequest) { + requestWrapper = new XssHttpServletRequestWrapper((HttpServletRequest) request); + } + //获取请求中的流如何,将取出来的字符串,再次转换成流,然后把它放入到新request对象中。 + // 在chain.doFiler方法中传递新的request对象 + if(requestWrapper == null) { + + chain.doFilter(request, response); + } else { + chain.doFilter(requestWrapper, response); + } + } + + @Override + public void destroy() { + + } +} diff --git a/src/main/java/com/bwie/config/XssHttpServletRequestWrapper.java b/src/main/java/com/bwie/config/XssHttpServletRequestWrapper.java new file mode 100644 index 0000000..2c0675a --- /dev/null +++ b/src/main/java/com/bwie/config/XssHttpServletRequestWrapper.java @@ -0,0 +1,57 @@ +package com.bwie.config; + +import javax.servlet.ReadListener; +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStreamReader; + +public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { + public String _body; + + public XssHttpServletRequestWrapper(HttpServletRequest request) throws IOException { + super(request); + StringBuffer sBuffer = new StringBuffer(); + BufferedReader bufferedReader = request.getReader(); + String line; + while ((line = bufferedReader.readLine()) != null) { + sBuffer.append(line); + } + _body = sBuffer.toString(); + + } + + @Override + public ServletInputStream getInputStream() { + final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(_body.getBytes()); + return new ServletInputStream() { + @Override + public int read() { + return byteArrayInputStream.read(); + } + + @Override + public boolean isFinished() { + return false; + } + + @Override + public boolean isReady() { + return false; + } + + @Override + public void setReadListener(ReadListener listener) { + + } + }; + } + + @Override + public BufferedReader getReader() { + return new BufferedReader(new InputStreamReader(this.getInputStream())); + } +} diff --git a/src/main/java/com/bwie/utils/HttpServletRequestReader.java b/src/main/java/com/bwie/utils/HttpServletRequestReader.java new file mode 100644 index 0000000..5f862d8 --- /dev/null +++ b/src/main/java/com/bwie/utils/HttpServletRequestReader.java @@ -0,0 +1,35 @@ +package com.bwie.utils; + +import javax.servlet.http.HttpServletRequest; +import java.io.BufferedReader; +import java.io.IOException; + +public class HttpServletRequestReader { + + // 字符串读取 + // 方法一 + public static String ReadAsChars(HttpServletRequest request) { + + BufferedReader br = null; + StringBuilder sb = new StringBuilder(""); + try { + br = request.getReader(); + String str; + while ((str = br.readLine()) != null) { + sb.append(str); + } + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (null != br) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return sb.toString(); + } +} diff --git a/target/classes/com/bwie/Filter/XssFilter.class b/target/classes/com/bwie/Filter/XssFilter.class new file mode 100644 index 0000000000000000000000000000000000000000..a33cebd0f5ef06e5119e5adfbb629d3fb88bb3a8 GIT binary patch literal 1368 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 KJ+20>7JmWT^jon2 literal 0 HcmV?d00001 diff --git a/target/demo11-3.6.0.jar b/target/demo11-3.6.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..bdfcdb4c55b16c992cd83102dcd3cb3b90bd65ef GIT binary patch literal 17517 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 j=ojWb$NvfQSAZlZ3HelV@FO2X0CM