package com.ruoyi.common.filter; 
 | 
  
 | 
import java.io.BufferedReader; 
 | 
import java.io.ByteArrayInputStream; 
 | 
import java.io.IOException; 
 | 
import java.io.InputStreamReader; 
 | 
import javax.servlet.ReadListener; 
 | 
import javax.servlet.ServletInputStream; 
 | 
import javax.servlet.ServletResponse; 
 | 
import javax.servlet.http.HttpServletRequest; 
 | 
import javax.servlet.http.HttpServletRequestWrapper; 
 | 
import com.ruoyi.common.utils.http.HttpHelper; 
 | 
  
 | 
/** 
 | 
 * 构建可重复读取inputStream的request 
 | 
 *  
 | 
 * @author ruoyi 
 | 
 */ 
 | 
public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper 
 | 
{ 
 | 
    private final byte[] body; 
 | 
  
 | 
    public RepeatedlyRequestWrapper(HttpServletRequest request, ServletResponse response) throws IOException 
 | 
    { 
 | 
        super(request); 
 | 
        request.setCharacterEncoding("UTF-8"); 
 | 
        response.setCharacterEncoding("UTF-8"); 
 | 
  
 | 
        body = HttpHelper.getBodyString(request).getBytes("UTF-8"); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public BufferedReader getReader() throws IOException 
 | 
    { 
 | 
        return new BufferedReader(new InputStreamReader(getInputStream())); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public ServletInputStream getInputStream() throws IOException 
 | 
    { 
 | 
        final ByteArrayInputStream bais = new ByteArrayInputStream(body); 
 | 
        return new ServletInputStream() 
 | 
        { 
 | 
            @Override 
 | 
            public int read() throws IOException 
 | 
            { 
 | 
                return bais.read(); 
 | 
            } 
 | 
  
 | 
            @Override 
 | 
            public int available() throws IOException 
 | 
            { 
 | 
                return body.length; 
 | 
            } 
 | 
  
 | 
            @Override 
 | 
            public boolean isFinished() 
 | 
            { 
 | 
                return false; 
 | 
            } 
 | 
  
 | 
            @Override 
 | 
            public boolean isReady() 
 | 
            { 
 | 
                return false; 
 | 
            } 
 | 
  
 | 
            @Override 
 | 
            public void setReadListener(ReadListener readListener) 
 | 
            { 
 | 
  
 | 
            } 
 | 
        }; 
 | 
    } 
 | 
} 
 |