1 package ch.qos.logback.access.servlet;
2
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStreamReader;
6
7 import javax.servlet.ServletInputStream;
8 import javax.servlet.http.HttpServletRequest;
9 import javax.servlet.http.HttpServletRequestWrapper;
10
11 import ch.qos.logback.access.AccessConstants;
12
13
14
15
16
17
18 class TeeHttpServletRequest extends HttpServletRequestWrapper {
19
20 private TeeServletInputStream inStream;
21 private BufferedReader reader;
22 boolean postedParametersMode = false;
23
24 TeeHttpServletRequest(HttpServletRequest request) {
25 super(request);
26 if (Util.isFormUrlEncoded(request)) {
27 postedParametersMode = true;
28 } else {
29 inStream = new TeeServletInputStream(request);
30
31 request
32 .setAttribute(AccessConstants.LB_INPUT_BUFFER, inStream.getInputBuffer());
33 reader = new BufferedReader(new InputStreamReader(inStream));
34 }
35
36 }
37
38 byte[] getInputBuffer() {
39 if (postedParametersMode) {
40 throw new IllegalStateException("Call disallowed in postedParametersMode");
41 }
42 return inStream.getInputBuffer();
43 }
44
45 @Override
46 public ServletInputStream getInputStream() throws IOException {
47 if (!postedParametersMode) {
48 return inStream;
49 } else {
50 return super.getInputStream();
51 }
52 }
53
54
55
56 @Override
57 public BufferedReader getReader() throws IOException {
58 if (!postedParametersMode) {
59 return reader;
60 } else {
61 return super.getReader();
62 }
63 }
64
65 public boolean isPostedParametersMode() {
66 return postedParametersMode;
67 }
68
69 }