From 1a31026e9802ae31bfe9b9d6b2c04ac8b123156b Mon Sep 17 00:00:00 2001 From: Marta Medio Date: Fri, 3 Nov 2023 16:29:31 +0100 Subject: [PATCH] Deprecate KeyValue configuration from Filter and extract it into a config package (#3107) --- ...adersIfNotPresentGatewayFilterFactory.java | 10 ++++ .../gateway/support/KeyValueConverter.java | 5 ++ .../gateway/support/config/KeyValue.java | 48 +++++++++++++++++++ .../support/config/KeyValueConfig.java | 36 ++++++++++++++ .../support/config/KeyValueConverter.java | 43 +++++++++++++++++ 5 files changed, 142 insertions(+) create mode 100644 spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/config/KeyValue.java create mode 100644 spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/config/KeyValueConfig.java create mode 100644 spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/config/KeyValueConverter.java diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AddRequestHeadersIfNotPresentGatewayFilterFactory.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AddRequestHeadersIfNotPresentGatewayFilterFactory.java index f912b928..67ea90bd 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AddRequestHeadersIfNotPresentGatewayFilterFactory.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/AddRequestHeadersIfNotPresentGatewayFilterFactory.java @@ -122,6 +122,11 @@ public class AddRequestHeadersIfNotPresentGatewayFilterFactory return KeyValueConfig.class; } + /** + * @deprecated in favour of + * {@link org.springframework.cloud.gateway.support.config.KeyValueConfig} + */ + @Deprecated public static class KeyValueConfig { private KeyValue[] keyValues; @@ -136,6 +141,11 @@ public class AddRequestHeadersIfNotPresentGatewayFilterFactory } + /** + * @deprecated in favour of + * {@link org.springframework.cloud.gateway.support.config.KeyValue} + */ + @Deprecated public static class KeyValue { private final String key; diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/KeyValueConverter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/KeyValueConverter.java index 572b4190..cc57f4b2 100644 --- a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/KeyValueConverter.java +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/KeyValueConverter.java @@ -20,6 +20,11 @@ import org.springframework.cloud.gateway.filter.factory.AddRequestHeadersIfNotPr import org.springframework.core.convert.converter.Converter; import org.springframework.util.StringUtils; +/** + * @deprecated in favour of + * {@link org.springframework.cloud.gateway.support.config.KeyValueConverter} + */ +@Deprecated public class KeyValueConverter implements Converter { private static final String INVALID_CONFIGURATION_MESSAGE = "Invalid configuration, expected format is: 'key:value'"; diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/config/KeyValue.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/config/KeyValue.java new file mode 100644 index 00000000..3f26ef5e --- /dev/null +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/config/KeyValue.java @@ -0,0 +1,48 @@ +/* + * Copyright 2013-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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.gateway.support.config; + +import org.springframework.core.style.ToStringCreator; + +/** + * @author Marta Medio + */ +public class KeyValue { + + private final String key; + + private final String value; + + public KeyValue(String key, String value) { + this.key = key; + this.value = value; + } + + public String getKey() { + return key; + } + + public String getValue() { + return value; + } + + @Override + public String toString() { + return new ToStringCreator(this).append("name", key).append("value", value).toString(); + } + +} diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/config/KeyValueConfig.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/config/KeyValueConfig.java new file mode 100644 index 00000000..a351ba52 --- /dev/null +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/config/KeyValueConfig.java @@ -0,0 +1,36 @@ +/* + * Copyright 2013-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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.gateway.support.config; + +/** + * Adds a new format of configuration for filters. - Filter: key:value,key1:value1 + * + * @author Marta Medio + */ +public class KeyValueConfig { + + private KeyValue[] keyValues; + + public KeyValue[] getKeyValues() { + return keyValues; + } + + public void setKeyValues(KeyValue[] keyValues) { + this.keyValues = keyValues; + } + +} diff --git a/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/config/KeyValueConverter.java b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/config/KeyValueConverter.java new file mode 100644 index 00000000..a2101aa2 --- /dev/null +++ b/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/support/config/KeyValueConverter.java @@ -0,0 +1,43 @@ +/* + * Copyright 2013-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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.gateway.support.config; + +import org.springframework.core.convert.converter.Converter; +import org.springframework.util.StringUtils; + +/** + * @author Marta Medio + */ +public class KeyValueConverter implements Converter { + + private static final String INVALID_CONFIGURATION_MESSAGE = "Invalid configuration, expected format is: 'key:value'"; + + @Override + public KeyValue convert(String source) throws IllegalArgumentException { + try { + String[] split = source.split(":"); + if (source.contains(":") && StringUtils.hasText(split[0])) { + return new KeyValue(split[0], split.length == 1 ? "" : split[1]); + } + throw new IllegalArgumentException(INVALID_CONFIGURATION_MESSAGE); + } + catch (ArrayIndexOutOfBoundsException e) { + throw new IllegalArgumentException(INVALID_CONFIGURATION_MESSAGE); + } + } + +}