Http Servlet request lose params from POST body after read it once

前端 未结 13 2276
一个人的身影
一个人的身影 2020-11-22 14:56

I\'m trying to accessing two http request parameters in a Java Servlet filter, nothing new here, but was surprised to find that the parameters have already been consumed! Be

13条回答
  •  说谎
    说谎 (楼主)
    2020-11-22 15:52

    I too had the same issue and I believe the code below is more simple and it is working for me,

    public class MultiReadHttpServletRequest extends  HttpServletRequestWrapper {
    
     private String _body;
    
    public MultiReadHttpServletRequest(HttpServletRequest request) throws IOException {
       super(request);
       _body = "";
       BufferedReader bufferedReader = request.getReader();           
       String line;
       while ((line = bufferedReader.readLine()) != null){
           _body += line;
       }
    }
    
    @Override
    public ServletInputStream getInputStream() throws IOException {
       final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(_body.getBytes());
       return new ServletInputStream() {
           public int read() throws IOException {
               return byteArrayInputStream.read();
           }
       };
    }
    
    @Override
    public BufferedReader getReader() throws IOException {
       return new BufferedReader(new InputStreamReader(this.getInputStream()));
    }
    }
    

    in the filter java class,

    HttpServletRequest properRequest = ((HttpServletRequest) req);
    MultiReadHttpServletRequest wrappedRequest = new MultiReadHttpServletRequest(properRequest);
    req = wrappedRequest;
    inputJson = IOUtils.toString(req.getReader());
    System.out.println("body"+inputJson);
    

    Please let me know if you have any queries

提交回复
热议问题