Browse Source

Merge branch '4.0.x'

pull/2993/head
sgibb 2 years ago
parent
commit
d8c6eb2641
No known key found for this signature in database
GPG Key ID: 7788A47380690861
  1. 4
      spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RewritePathGatewayFilterFactory.java
  2. 9
      spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/HeaderRoutePredicateFactory.java

4
spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RewritePathGatewayFilterFactory.java

@ -18,6 +18,7 @@ package org.springframework.cloud.gateway.filter.factory; @@ -18,6 +18,7 @@ package org.springframework.cloud.gateway.filter.factory;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
import reactor.core.publisher.Mono;
@ -59,13 +60,14 @@ public class RewritePathGatewayFilterFactory @@ -59,13 +60,14 @@ public class RewritePathGatewayFilterFactory
@Override
public GatewayFilter apply(Config config) {
String replacement = config.replacement.replace("$\\", "$");
Pattern pattern = Pattern.compile(config.regexp);
return new GatewayFilter() {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest req = exchange.getRequest();
addOriginalRequestUrl(exchange, req.getURI());
String path = req.getURI().getRawPath();
String newPath = path.replaceAll(config.regexp, replacement);
String newPath = pattern.matcher(path).replaceAll(replacement);
ServerHttpRequest request = req.mutate().path(newPath).build();

9
spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/handler/predicate/HeaderRoutePredicateFactory.java

@ -20,10 +20,11 @@ import java.util.Arrays; @@ -20,10 +20,11 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.function.Predicate;
import java.util.regex.Pattern;
import jakarta.validation.constraints.NotEmpty;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.server.ServerWebExchange;
@ -53,7 +54,7 @@ public class HeaderRoutePredicateFactory extends AbstractRoutePredicateFactory<H @@ -53,7 +54,7 @@ public class HeaderRoutePredicateFactory extends AbstractRoutePredicateFactory<H
@Override
public Predicate<ServerWebExchange> apply(Config config) {
boolean hasRegex = !ObjectUtils.isEmpty(config.regexp);
Pattern pattern = (StringUtils.hasText(config.regexp)) ? Pattern.compile(config.regexp) : null;
return new GatewayPredicate() {
@Override
@ -64,11 +65,11 @@ public class HeaderRoutePredicateFactory extends AbstractRoutePredicateFactory<H @@ -64,11 +65,11 @@ public class HeaderRoutePredicateFactory extends AbstractRoutePredicateFactory<H
return false;
}
// values is now guaranteed to not be empty
if (hasRegex) {
if (pattern != null) {
// check if a header value matches
for (int i = 0; i < values.size(); i++) {
String value = values.get(i);
if (value.matches(config.regexp)) {
if (pattern.asMatchPredicate().test(value)) {
return true;
}
}

Loading…
Cancel
Save