zoukankan      html  css  js  c++  java
  • 怎么让request inputstream 可以多次读取

    1、包装ServletRequest对象

    public class IRequestWrapper extends HttpServletRequestWrapper {
        private byte[] body;
    
        public IRequestWrapper(HttpServletRequest request) throws IOException {
            super(request);
            body = readBytes(request.getInputStream());
        }
    
        public static byte[] readBytes(InputStream is) throws IOException {
            byte[] buffer = new byte[1024];
            int len = 0;
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            while ((len = is.read(buffer)) != -1) {
                bos.write(buffer, 0, len);
            }
            bos.flush();
            return bos.toByteArray();
        }
    
    
        @Override
        public BufferedReader getReader() {
            return new BufferedReader(new InputStreamReader(getInputStream()));
        }
    
    
        @Override
        public ServletInputStream getInputStream() {
            final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body);
            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 readListener) {
                }
            };
    
        }
    }

    2、在过滤器中应用包装

    public class HttpServletRequestWrapperFilter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) {
    
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            if (request instanceof HttpServletRequest) {
                request = new IRequestWrapper((HttpServletRequest) request);
            }
            chain.doFilter(request, response);
        }
    
    
        @Override
        public void destroy() {
    
        }
    }
    

      

  • 相关阅读:
    Tomcat
    二叉树
    CDOJ 1962 天才钱vs学霸周2【最大流】
    次小生成树(POJ1679/CDOJ1959)
    CDOJ1927 爱吃瓜的伊卡洛斯(2) 【并查集】启发式合并+set
    HDU 1074 Doing Homework(DP状态压缩)
    uva 11367 (Dijkstra+DP)
    线段树模板
    openpose pytorch代码分析
    opencv图片坐标和数组下标
  • 原文地址:https://www.cnblogs.com/mylittlecabin/p/14931352.html
Copyright © 2011-2022 走看看