|
|
|
@ -213,6 +213,57 @@ public class ContentCachingRequestWrapper extends HttpServletRequestWrapper { |
|
|
|
|
this.is = is; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public int readLine(final byte[] b, final int off, final int len) throws IOException { |
|
|
|
|
int count = is.readLine(b, off, len); |
|
|
|
|
cache(b, off, count); |
|
|
|
|
return count; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void cache(final byte[] b, final int off, final int count) { |
|
|
|
|
if (contentCacheLimit != null && cachedContent.size() == contentCacheLimit) { |
|
|
|
|
this.overflow = true; |
|
|
|
|
handleContentOverflow(contentCacheLimit); |
|
|
|
|
} else { |
|
|
|
|
int sizeToCache = contentCacheLimit == null || count + cachedContent.size() < contentCacheLimit |
|
|
|
|
? count |
|
|
|
|
: contentCacheLimit - cachedContent.size(); |
|
|
|
|
cachedContent.write(b, off, sizeToCache); |
|
|
|
|
if (sizeToCache < count) { |
|
|
|
|
this.overflow = true; |
|
|
|
|
handleContentOverflow(contentCacheLimit); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public int read(final byte[] b) throws IOException { |
|
|
|
|
int count = super.read(b); |
|
|
|
|
if (!this.overflow && count > 0) { |
|
|
|
|
if (contentCacheLimit != null && cachedContent.size() == contentCacheLimit) { |
|
|
|
|
this.overflow = true; |
|
|
|
|
handleContentOverflow(contentCacheLimit); |
|
|
|
|
} else { |
|
|
|
|
int sizeToCache = contentCacheLimit == null || count + cachedContent.size() < contentCacheLimit |
|
|
|
|
? count |
|
|
|
|
: contentCacheLimit - cachedContent.size(); |
|
|
|
|
cachedContent.write(b, 0, sizeToCache); |
|
|
|
|
if (sizeToCache < count) { |
|
|
|
|
this.overflow = true; |
|
|
|
|
handleContentOverflow(contentCacheLimit); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return count; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public int read(final byte[] b, final int off, final int len) throws IOException { |
|
|
|
|
int count = is.read(b, off, len); |
|
|
|
|
cache(b, off, count); |
|
|
|
|
return count; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public int read() throws IOException { |
|
|
|
|
int ch = this.is.read(); |
|
|
|
|