Improve forwarded URL support in HtmlUnit integration

Closes gh-28722
This commit is contained in:
rstoyanchev
2022-06-27 15:19:30 +01:00
parent 1374d6d912
commit 9c2ad4a1b1

View File

@@ -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;
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;
}
}
}