This project has retired. For details please refer to its
Attic page.
ProxyHttpServletRequestWrapper xref
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.chemistry.opencmis.server.filter;
20
21 import javax.servlet.http.HttpServletRequest;
22 import javax.servlet.http.HttpServletRequestWrapper;
23
24 public class ProxyHttpServletRequestWrapper extends HttpServletRequestWrapper {
25
26 public static final String FORWARDED_HOST_HEADER = "X-Forwarded-Host";
27 public static final String FORWARDED_PROTO_HEADER = "X-Forwarded-Proto";
28 public static final String HTTPS_SCHEME = "https";
29 public static final String HTTP_SCHEME = "http";
30
31 private String scheme;
32 private String serverName;
33 private int serverPort;
34
35 public ProxyHttpServletRequestWrapper(HttpServletRequest request) {
36 super(request);
37
38 scheme = request.getHeader(FORWARDED_PROTO_HEADER);
39
40 if (!HTTP_SCHEME.equalsIgnoreCase(scheme) && !HTTPS_SCHEME.equalsIgnoreCase(scheme)) {
41 scheme = request.getScheme();
42 }
43
44 serverName = request.getServerName();
45 serverPort = request.getServerPort();
46
47 String host = request.getHeader(FORWARDED_HOST_HEADER);
48 if ((host != null) && (host.length() > 0)) {
49 int index = host.indexOf(':');
50 if (index < 0) {
51 serverName = host;
52 serverPort = getDefaultPort(scheme);
53 } else {
54 serverName = host.substring(0, index);
55 try {
56 serverPort = Integer.parseInt(host.substring(index + 1));
57 } catch (NumberFormatException e) {
58 serverPort = getDefaultPort(scheme);
59 }
60 }
61 }
62 }
63
64 private int getDefaultPort(String scheme) {
65 if (HTTPS_SCHEME.equalsIgnoreCase(scheme)) {
66 return 443;
67 }
68
69 return 80;
70 }
71
72 @Override
73 public String getScheme() {
74 return scheme;
75 }
76
77 @Override
78 public String getServerName() {
79 return serverName;
80 }
81
82 @Override
83 public int getServerPort() {
84 return serverPort;
85 }
86 }