1 package ch.qos.logback.access.servlet;
2
3 import java.io.ByteArrayInputStream;
4 import java.io.IOException;
5 import java.io.InputStream;
6
7 import javax.servlet.ServletInputStream;
8 import javax.servlet.http.HttpServletRequest;
9
10 class TeeServletInputStream extends ServletInputStream {
11
12 InputStream in;
13 byte[] inputBuffer;
14
15 TeeServletInputStream(HttpServletRequest request) {
16 duplicateInputStream(request);
17 }
18
19 @Override
20 public int read() throws IOException {
21
22 return in.read();
23 }
24
25 private void duplicateInputStream(HttpServletRequest request) {
26 try {
27 int len = request.getContentLength();
28 ServletInputStream originalSIS = request.getInputStream();
29 if (len < 0) {
30 in = originalSIS;
31 } else {
32 inputBuffer = new byte[len];
33 int n = originalSIS.read(inputBuffer, 0, len);
34 assert n == len;
35 this.in = new ByteArrayInputStream(inputBuffer);
36 originalSIS.close();
37 }
38 } catch (IOException e) {
39 e.printStackTrace();
40 }
41 }
42
43 byte[] getInputBuffer() {
44 return inputBuffer;
45 }
46 }