]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.ee/src/org/argeo/cms/servlet/ServletUtils.java
Re-enable previous Error handling in RAP
[lgpl/argeo-commons.git] / org.argeo.cms.ee / src / org / argeo / cms / servlet / ServletUtils.java
1 package org.argeo.cms.servlet;
2
3 import static org.argeo.cms.http.HttpHeader.VIA;
4 import static org.argeo.cms.http.HttpHeader.X_FORWARDED_HOST;
5
6 import java.net.URI;
7 import java.util.ArrayList;
8 import java.util.Enumeration;
9 import java.util.List;
10
11 import javax.servlet.http.HttpServletRequest;
12
13 /** Servlet utilities. */
14 public class ServletUtils {
15
16 /**
17 * The base URL for this query (without any path component (not even an ending
18 * '/'), taking into account reverse proxies.
19 */
20 public static StringBuilder getRequestUrlBase(HttpServletRequest req) {
21 List<String> viaHosts = new ArrayList<>();
22 for (Enumeration<String> it = req.getHeaders(VIA.getHeaderName()); it.hasMoreElements();) {
23 String[] arr = it.nextElement().split(" ");
24 viaHosts.add(arr[1]);
25 }
26
27 String outerHost = viaHosts.isEmpty() ? null : viaHosts.get(0);
28 if (outerHost == null) {
29 // Try non-standard header
30 String forwardedHost = req.getHeader(X_FORWARDED_HOST.getHeaderName());
31 if (forwardedHost != null) {
32 String[] arr = forwardedHost.split(",");
33 outerHost = arr[0];
34 }
35 }
36
37 URI requestUrl = URI.create(req.getRequestURL().toString());
38
39 boolean isReverseProxy = outerHost != null && !outerHost.equals(requestUrl.getHost());
40 if (isReverseProxy) {
41 String protocol = req.isSecure() ? "https" : "http";
42 return new StringBuilder(protocol + "://" + outerHost);
43 } else {
44 return new StringBuilder(requestUrl.getScheme() + "://" + requestUrl.getHost()
45 + (requestUrl.getPort() > 0 ? ":" + requestUrl.getPort() : ""));
46 }
47 }
48
49 /** singleton */
50 private ServletUtils() {
51 }
52 }