]>
git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.ee/src/org/argeo/cms/servlet/ServletUtils.java
1 package org
.argeo
.cms
.servlet
;
3 import static org
.argeo
.cms
.http
.HttpHeader
.VIA
;
4 import static org
.argeo
.cms
.http
.HttpHeader
.X_FORWARDED_HOST
;
7 import java
.util
.ArrayList
;
8 import java
.util
.Enumeration
;
11 import javax
.servlet
.http
.HttpServletRequest
;
13 /** Servlet utilities. */
14 public class ServletUtils
{
17 * The base URL for this query (without any path component (not even an ending
18 * '/'), taking into account reverse proxies.
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(" ");
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(",");
37 URI requestUrl
= URI
.create(req
.getRequestURL().toString());
39 boolean isReverseProxy
= outerHost
!= null && !outerHost
.equals(requestUrl
.getHost());
41 String protocol
= req
.isSecure() ?
"https" : "http";
42 return new StringBuilder(protocol
+ "://" + outerHost
);
44 return new StringBuilder(requestUrl
.getScheme() + "://" + requestUrl
.getHost()
45 + (requestUrl
.getPort() > 0 ?
":" + requestUrl
.getPort() : ""));
50 private ServletUtils() {