Skip to content

Commit 269f251

Browse files
committed
Validate redirect status code in UrlHandlerFilter
1 parent f19f1a6 commit 269f251

File tree

2 files changed

+15
-9
lines changed

2 files changed

+15
-9
lines changed

spring-web/src/main/java/org/springframework/web/filter/UrlHandlerFilter.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,10 @@
3333
import org.jspecify.annotations.Nullable;
3434

3535
import org.springframework.http.HttpHeaders;
36-
import org.springframework.http.HttpStatus;
36+
import org.springframework.http.HttpStatusCode;
3737
import org.springframework.http.server.PathContainer;
3838
import org.springframework.http.server.RequestPath;
39+
import org.springframework.util.Assert;
3940
import org.springframework.util.LinkedMultiValueMap;
4041
import org.springframework.util.MultiValueMap;
4142
import org.springframework.util.StringUtils;
@@ -146,11 +147,11 @@ interface TrailingSlashSpec {
146147
/**
147148
* Handle requests by sending a redirect to the same URL but the
148149
* trailing slash trimmed.
149-
* @param status the redirect status to use
150+
* @param statusCode the redirect status to use
150151
* @return the top level {@link Builder}, which allows adding more
151152
* handlers and then building the Filter instance.
152153
*/
153-
Builder redirect(HttpStatus status);
154+
Builder redirect(HttpStatusCode statusCode);
154155

155156
/**
156157
* Handle the request by wrapping it in order to trim the trailing
@@ -207,8 +208,8 @@ public TrailingSlashSpec intercept(Consumer<HttpServletRequest> consumer) {
207208
}
208209

209210
@Override
210-
public Builder redirect(HttpStatus status) {
211-
Handler handler = new RedirectTrailingSlashHandler(status, this.interceptor);
211+
public Builder redirect(HttpStatusCode statusCode) {
212+
Handler handler = new RedirectTrailingSlashHandler(statusCode, this.interceptor);
212213
return DefaultBuilder.this.addHandler(this.pathPatterns, handler);
213214
}
214215

@@ -288,11 +289,13 @@ protected String trimTrailingSlash(String path) {
288289
*/
289290
private static final class RedirectTrailingSlashHandler extends AbstractTrailingSlashHandler {
290291

291-
private final HttpStatus httpStatus;
292+
private final HttpStatusCode statusCode;
292293

293-
RedirectTrailingSlashHandler(HttpStatus httpStatus, @Nullable Consumer<HttpServletRequest> interceptor) {
294+
RedirectTrailingSlashHandler(HttpStatusCode statusCode, @Nullable Consumer<HttpServletRequest> interceptor) {
294295
super(interceptor);
295-
this.httpStatus = httpStatus;
296+
Assert.isTrue(statusCode.is3xxRedirection(), "HTTP status code for redirect handlers " +
297+
"must be in the Redirection class (3xx)");
298+
this.statusCode = statusCode;
296299
}
297300

298301
@Override
@@ -305,7 +308,7 @@ public void handleInternal(HttpServletRequest request, HttpServletResponse respo
305308
}
306309

307310
response.resetBuffer();
308-
response.setStatus(this.httpStatus.value());
311+
response.setStatus(this.statusCode.value());
309312
response.setHeader(HttpHeaders.LOCATION, location);
310313
response.flushBuffer();
311314
}

spring-web/src/main/java/org/springframework/web/filter/reactive/UrlHandlerFilter.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.springframework.http.server.RequestPath;
3535
import org.springframework.http.server.reactive.ServerHttpRequest;
3636
import org.springframework.http.server.reactive.ServerHttpResponse;
37+
import org.springframework.util.Assert;
3738
import org.springframework.util.LinkedMultiValueMap;
3839
import org.springframework.util.MultiValueMap;
3940
import org.springframework.util.StringUtils;
@@ -285,6 +286,8 @@ private static final class RedirectTrailingSlashHandler extends AbstractTrailing
285286
HttpStatusCode statusCode, @Nullable List<Function<ServerHttpRequest, Mono<Void>>> interceptors) {
286287

287288
super(interceptors);
289+
Assert.isTrue(statusCode.is3xxRedirection(), "HTTP status code for redirect handlers " +
290+
"must be in the Redirection class (3xx)");
288291
this.statusCode = statusCode;
289292
}
290293

0 commit comments

Comments
 (0)