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