疯狂的狮子li
2022-11-21 4d02466fed4f3ea012a80c3359cde9af0737141f
ruoyi-common/src/main/java/com/ruoyi/common/filter/RepeatedlyRequestWrapper.java
@@ -1,6 +1,7 @@
package com.ruoyi.common.filter;
import cn.hutool.core.io.IoUtil;
import com.ruoyi.common.constant.Constants;
import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
@@ -11,65 +12,54 @@
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
/**
 * 构建可重复读取inputStream的request
 *
 * @author ruoyi
 */
public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper
{
public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper {
    private final byte[] body;
    public RepeatedlyRequestWrapper(HttpServletRequest request, ServletResponse response) throws IOException
    {
    public RepeatedlyRequestWrapper(HttpServletRequest request, ServletResponse response) throws IOException {
        super(request);
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        request.setCharacterEncoding(Constants.UTF8);
        response.setCharacterEncoding(Constants.UTF8);
        body = IoUtil.readUtf8(request.getInputStream()).getBytes(StandardCharsets.UTF_8);
        body = IoUtil.readBytes(request.getInputStream(), false);
    }
    @Override
    public BufferedReader getReader() throws IOException
    {
    public BufferedReader getReader() throws IOException {
        return new BufferedReader(new InputStreamReader(getInputStream()));
    }
    @Override
    public ServletInputStream getInputStream() throws IOException
    {
    public ServletInputStream getInputStream() throws IOException {
        final ByteArrayInputStream bais = new ByteArrayInputStream(body);
        return new ServletInputStream()
        {
        return new ServletInputStream() {
            @Override
            public int read() throws IOException
            {
            public int read() throws IOException {
                return bais.read();
            }
            @Override
            public int available() throws IOException
            {
            public int available() throws IOException {
                return body.length;
            }
            @Override
            public boolean isFinished()
            {
            public boolean isFinished() {
                return false;
            }
            @Override
            public boolean isReady()
            {
            public boolean isReady() {
                return false;
            }
            @Override
            public void setReadListener(ReadListener readListener)
            {
            public void setReadListener(ReadListener readListener) {
            }
        };