Skip to content

Commit cae6d2c

Browse files
committed
Solve troubles with chained X-Forwarded headers.
X-Forwarded-Proto can be a list ie. https, http when two proxy servers are used. This patch makes sure that generated response uses first host/values.
1 parent e33032a commit cae6d2c

1 file changed

Lines changed: 9 additions & 1 deletion

File tree

  • bundles/org.opensmarthouse.core.io.rest.item/src/main/java/org/openhab/core/io/rest/core/internal/item

bundles/org.opensmarthouse.core.io.rest.item/src/main/java/org/openhab/core/io/rest/core/internal/item/ItemResource.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,13 +149,21 @@ public class ItemResource implements RESTResource {
149149
*/
150150
private static void respectForwarded(final UriBuilder uriBuilder, final @Context HttpHeaders httpHeaders) {
151151
Optional.ofNullable(httpHeaders.getHeaderString("X-Forwarded-Host")).ifPresent(host -> {
152+
if (host.contains(",")) {
153+
host = host.split(",")[0];
154+
}
152155
final String[] parts = host.split(":");
153156
uriBuilder.host(parts[0]);
154157
if (parts.length > 1) {
155158
uriBuilder.port(Integer.parseInt(parts[1]));
156159
}
157160
});
158-
Optional.ofNullable(httpHeaders.getHeaderString("X-Forwarded-Proto")).ifPresent(uriBuilder::scheme);
161+
Optional.ofNullable(httpHeaders.getHeaderString("X-Forwarded-Proto")).map(scheme -> {
162+
if (scheme.contains(",")) {
163+
return scheme.split(",")[0];
164+
}
165+
return scheme;
166+
}).ifPresent(uriBuilder::scheme);
159167
}
160168

161169
private final Logger logger = LoggerFactory.getLogger(ItemResource.class);

0 commit comments

Comments
 (0)