|
15 | 15 | public interface ForwardedUri { |
16 | 16 |
|
17 | 17 | String X_FORWARDED_PREFIX = "X-Forwarded-Prefix"; |
| 18 | + String X_FORWARDED_PROTO = "X-Forwarded-Proto"; |
18 | 19 | Splitter PATH_SPLITTER = Splitter.on('/').trimResults().omitEmptyStrings(); |
19 | 20 |
|
20 | 21 | static URICustomizer from(ContainerRequestContext requestContext, WebContext webContext) { |
21 | | - return new URICustomizer(requestContext.getUriInfo().getRequestUri()) |
| 22 | + return customizer(requestContext, webContext) |
22 | 23 | .prependPathSegments(prefix(requestContext, webContext)); |
23 | 24 | } |
24 | 25 |
|
25 | 26 | static URICustomizer base(ContainerRequestContext requestContext, WebContext webContext) { |
26 | | - return new URICustomizer(requestContext.getUriInfo().getRequestUri()) |
| 27 | + return customizer(requestContext, webContext) |
27 | 28 | .setPathSegments(prefix(requestContext, webContext)) |
28 | 29 | .ensureNoTrailingSlash() |
29 | 30 | .clearParameters(); |
30 | 31 | } |
31 | 32 |
|
| 33 | + static URICustomizer customizer(ContainerRequestContext requestContext, WebContext webContext) { |
| 34 | + URICustomizer uriCustomizer = new URICustomizer(requestContext.getUriInfo().getRequestUri()); |
| 35 | + |
| 36 | + if (!"https".equalsIgnoreCase(uriCustomizer.getScheme()) |
| 37 | + && !requestContext.getHeaders().containsKey(X_FORWARDED_PROTO) |
| 38 | + && webContext.isHttps()) { |
| 39 | + uriCustomizer.setScheme("https"); |
| 40 | + } |
| 41 | + |
| 42 | + return uriCustomizer; |
| 43 | + } |
| 44 | + |
32 | 45 | static List<String> prefix(ContainerRequestContext requestContext, WebContext webContext) { |
33 | 46 | if (requestContext.getHeaders().containsKey(X_FORWARDED_PREFIX)) { |
34 | 47 | return PATH_SPLITTER.splitToList(requestContext.getHeaderString(X_FORWARDED_PREFIX)); |
|
0 commit comments