Skip to content

Commit 27069b8

Browse files
itozapataodrotbohm
authored andcommitted
#112 - Added support for X-Forwarded-Ssl header during link construction.
1 parent 9ec6f34 commit 27069b8

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

src/main/java/org/springframework/hateoas/mvc/ControllerLinkBuilder.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,8 @@ public UriComponentsBuilder toUriComponentsBuilder() {
158158

159159
/**
160160
* Returns a {@link UriComponentsBuilder} obtained from the current servlet mapping with the host tweaked in case the
161-
* request contains an {@code X-Forwarded-Host} header.
161+
* request contains an {@code X-Forwarded-Host} header and the scheme tweaked in case the request contains an
162+
* {@code X-Forwarded-Ssl} header
162163
*
163164
* @return
164165
*/
@@ -167,6 +168,12 @@ static UriComponentsBuilder getBuilder() {
167168
HttpServletRequest request = getCurrentRequest();
168169
ServletUriComponentsBuilder builder = ServletUriComponentsBuilder.fromServletMapping(request);
169170

171+
String forwardedSsl = request.getHeader("X-Forwarded-Ssl");
172+
173+
if (StringUtils.hasText(forwardedSsl) && forwardedSsl.equalsIgnoreCase("on")) {
174+
builder.scheme("https");
175+
}
176+
170177
String header = request.getHeader("X-Forwarded-Host");
171178

172179
if (!StringUtils.hasText(header)) {

src/test/java/org/springframework/hateoas/mvc/ControllerLinkBuilderUnitTest.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,43 @@ public void usesForwardedHostAsHostIfHeaderIsSet() {
149149
assertThat(link.getHref(), startsWith("http://somethingDifferent"));
150150
}
151151

152+
/**
153+
* @see #112
154+
*/
155+
@Test
156+
public void usesForwardedSslIfHeaderIsSet() {
157+
158+
request.addHeader("X-Forwarded-Ssl", "on");
159+
160+
Link link = linkTo(PersonControllerImpl.class).withSelfRel();
161+
assertThat(link.getHref(), startsWith("https://"));
162+
}
163+
164+
/**
165+
* @see #112
166+
*/
167+
@Test
168+
public void usesForwardedSslIfHeaderIsSetOff() {
169+
170+
request.addHeader("X-Forwarded-Ssl", "off");
171+
172+
Link link = linkTo(PersonControllerImpl.class).withSelfRel();
173+
assertThat(link.getHref(), startsWith("http://"));
174+
}
175+
176+
/**
177+
* @see #112
178+
*/
179+
@Test
180+
public void usesForwardedSslAndHostIfHeaderIsSet() {
181+
182+
request.addHeader("X-Forwarded-Host", "somethingDifferent");
183+
request.addHeader("X-Forwarded-Ssl", "on");
184+
185+
Link link = linkTo(PersonControllerImpl.class).withSelfRel();
186+
assertThat(link.getHref(), startsWith("https://somethingDifferent"));
187+
}
188+
152189
/**
153190
* @see #26, #39
154191
*/

0 commit comments

Comments
 (0)