Browse Source

Improve forwarded URL support in HtmlUnit integration

Closes gh-28722
pull/28544/merge
rstoyanchev 4 years ago
parent
commit
9c2ad4a1b1
  1. 28
      spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/ForwardRequestPostProcessor.java

28
spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/ForwardRequestPostProcessor.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2018 the original author or authors.
* Copyright 2002-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -19,28 +19,42 @@ package org.springframework.test.web.servlet.htmlunit; @@ -19,28 +19,42 @@ package org.springframework.test.web.servlet.htmlunit;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.test.web.servlet.request.RequestPostProcessor;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
/**
* {@link RequestPostProcessor} for forward requests.
* {@link RequestPostProcessor} to update the request for a forwarded dispatch.
*
* @author Rob Winch
* @author Sam Brannen
* @author Rossen Stoyanchev
* @since 4.2
*/
final class ForwardRequestPostProcessor implements RequestPostProcessor {
private final String forwardUrl;
private final String forwardedUrl;
public ForwardRequestPostProcessor(String forwardUrl) {
Assert.hasText(forwardUrl, "Forward URL must not be null or empty");
this.forwardUrl = forwardUrl;
public ForwardRequestPostProcessor(String forwardedUrl) {
Assert.hasText(forwardedUrl, "Forwarded URL must not be null or empty");
this.forwardedUrl = forwardedUrl;
}
@Override
public MockHttpServletRequest postProcessRequest(MockHttpServletRequest request) {
request.setServletPath(this.forwardUrl);
request.setRequestURI(this.forwardedUrl);
request.setServletPath(initServletPath(request.getContextPath()));
return request;
}
private String initServletPath(String contextPath) {
if (StringUtils.hasText(contextPath)) {
Assert.state(this.forwardedUrl.startsWith(contextPath), "Forward supported to same contextPath only");
return (this.forwardedUrl.length() > contextPath.length() ?
this.forwardedUrl.substring(contextPath.length()) : "");
}
else {
return this.forwardedUrl;
}
}
}

Loading…
Cancel
Save