#112 - Added support for X-Forwarded-Ssl header during link construction.
This commit is contained in:
committed by
Oliver Gierke
parent
9ec6f34a6f
commit
27069b82d6
@@ -158,7 +158,8 @@ public class ControllerLinkBuilder extends LinkBuilderSupport<ControllerLinkBuil
|
||||
|
||||
/**
|
||||
* Returns a {@link UriComponentsBuilder} obtained from the current servlet mapping with the host tweaked in case the
|
||||
* request contains an {@code X-Forwarded-Host} header.
|
||||
* request contains an {@code X-Forwarded-Host} header and the scheme tweaked in case the request contains an
|
||||
* {@code X-Forwarded-Ssl} header
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@@ -167,6 +168,12 @@ public class ControllerLinkBuilder extends LinkBuilderSupport<ControllerLinkBuil
|
||||
HttpServletRequest request = getCurrentRequest();
|
||||
ServletUriComponentsBuilder builder = ServletUriComponentsBuilder.fromServletMapping(request);
|
||||
|
||||
String forwardedSsl = request.getHeader("X-Forwarded-Ssl");
|
||||
|
||||
if (StringUtils.hasText(forwardedSsl) && forwardedSsl.equalsIgnoreCase("on")) {
|
||||
builder.scheme("https");
|
||||
}
|
||||
|
||||
String header = request.getHeader("X-Forwarded-Host");
|
||||
|
||||
if (!StringUtils.hasText(header)) {
|
||||
|
||||
@@ -149,6 +149,43 @@ public class ControllerLinkBuilderUnitTest extends TestUtils {
|
||||
assertThat(link.getHref(), startsWith("http://somethingDifferent"));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see #112
|
||||
*/
|
||||
@Test
|
||||
public void usesForwardedSslIfHeaderIsSet() {
|
||||
|
||||
request.addHeader("X-Forwarded-Ssl", "on");
|
||||
|
||||
Link link = linkTo(PersonControllerImpl.class).withSelfRel();
|
||||
assertThat(link.getHref(), startsWith("https://"));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see #112
|
||||
*/
|
||||
@Test
|
||||
public void usesForwardedSslIfHeaderIsSetOff() {
|
||||
|
||||
request.addHeader("X-Forwarded-Ssl", "off");
|
||||
|
||||
Link link = linkTo(PersonControllerImpl.class).withSelfRel();
|
||||
assertThat(link.getHref(), startsWith("http://"));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see #112
|
||||
*/
|
||||
@Test
|
||||
public void usesForwardedSslAndHostIfHeaderIsSet() {
|
||||
|
||||
request.addHeader("X-Forwarded-Host", "somethingDifferent");
|
||||
request.addHeader("X-Forwarded-Ssl", "on");
|
||||
|
||||
Link link = linkTo(PersonControllerImpl.class).withSelfRel();
|
||||
assertThat(link.getHref(), startsWith("https://somethingDifferent"));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see #26, #39
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user