Skip to content

Commit 67b612d

Browse files
committed
Moves x-forwarded filter properties to correct namespace.
From spring.cloud.gateway.x-forwarded to spring.cloud.gateway.mvc.x-forwarded-request-headers-filter. Deprecates the later. The XForwardedRequestHeadersFilter bean is conditional on the x-forwarded-request-headers-filter.enabled property. Fixes gh-3238
1 parent b6fc8aa commit 67b612d

File tree

3 files changed

+233
-2
lines changed

3 files changed

+233
-2
lines changed

spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/GatewayServerMvcAutoConfiguration.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.springframework.cloud.gateway.server.mvc.filter.TransferEncodingNormalizationRequestHeadersFilter;
4141
import org.springframework.cloud.gateway.server.mvc.filter.WeightCalculatorFilter;
4242
import org.springframework.cloud.gateway.server.mvc.filter.XForwardedRequestHeadersFilter;
43+
import org.springframework.cloud.gateway.server.mvc.filter.XForwardedRequestHeadersFilterProperties;
4344
import org.springframework.cloud.gateway.server.mvc.handler.ProxyExchange;
4445
import org.springframework.cloud.gateway.server.mvc.handler.ProxyExchangeHandlerFunction;
4546
import org.springframework.cloud.gateway.server.mvc.handler.RestClientProxyExchange;
@@ -169,8 +170,16 @@ public WeightCalculatorFilter weightCalculatorFilter() {
169170

170171
@Bean
171172
@ConditionalOnMissingBean
172-
public XForwardedRequestHeadersFilter xForwardedRequestHeadersFilter() {
173-
return new XForwardedRequestHeadersFilter();
173+
@ConditionalOnProperty(prefix = XForwardedRequestHeadersFilterProperties.PREFIX, name = ".enabled",
174+
matchIfMissing = true)
175+
public XForwardedRequestHeadersFilter xForwardedRequestHeadersFilter(
176+
XForwardedRequestHeadersFilterProperties props) {
177+
return new XForwardedRequestHeadersFilter(props);
178+
}
179+
180+
@Bean
181+
public XForwardedRequestHeadersFilterProperties xForwardedRequestHeadersFilterProperties() {
182+
return new XForwardedRequestHeadersFilterProperties();
174183
}
175184

176185
}

spring-cloud-gateway-server-mvc/src/main/java/org/springframework/cloud/gateway/server/mvc/filter/XForwardedRequestHeadersFilter.java

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,16 @@
2323
import java.util.Map;
2424

2525
import org.springframework.boot.context.properties.ConfigurationProperties;
26+
import org.springframework.boot.context.properties.DeprecatedConfigurationProperty;
27+
import org.springframework.boot.context.properties.PropertyMapper;
2628
import org.springframework.core.Ordered;
2729
import org.springframework.http.HttpHeaders;
2830
import org.springframework.util.ObjectUtils;
2931
import org.springframework.util.StringUtils;
3032
import org.springframework.web.servlet.function.ServerRequest;
3133

34+
import static org.springframework.cloud.gateway.server.mvc.filter.XForwardedRequestHeadersFilterProperties.PREFIX;
35+
3236
@ConfigurationProperties("spring.cloud.gateway.x-forwarded")
3337
public class XForwardedRequestHeadersFilter implements HttpHeadersFilter.RequestHttpHeadersFilter, Ordered {
3438

@@ -95,55 +99,97 @@ public class XForwardedRequestHeadersFilter implements HttpHeadersFilter.Request
9599
/** If appending X-Forwarded-Prefix as a list is enabled. */
96100
private boolean prefixAppend = true;
97101

102+
@Deprecated
103+
public XForwardedRequestHeadersFilter() {
104+
this(new XForwardedRequestHeadersFilterProperties());
105+
}
106+
107+
public XForwardedRequestHeadersFilter(XForwardedRequestHeadersFilterProperties props) {
108+
// TODO: remove individual properties in 4.2.0
109+
// this.properties = properties;
110+
PropertyMapper map = PropertyMapper.get();
111+
map.from(props::getOrder).to(this::setOrder);
112+
map.from(props::isEnabled).to(this::setEnabled);
113+
map.from(props::isForEnabled).to(this::setForEnabled);
114+
map.from(props::isHostEnabled).to(this::setHostEnabled);
115+
map.from(props::isPortEnabled).to(this::setPortEnabled);
116+
map.from(props::isProtoEnabled).to(this::setProtoEnabled);
117+
map.from(props::isPrefixEnabled).to(this::setPrefixEnabled);
118+
map.from(props::isForAppend).to(this::setForAppend);
119+
map.from(props::isHostAppend).to(this::setHostAppend);
120+
map.from(props::isPortAppend).to(this::setPortAppend);
121+
map.from(props::isProtoAppend).to(this::setProtoAppend);
122+
map.from(props::isPrefixAppend).to(this::setPrefixAppend);
123+
}
124+
125+
@DeprecatedConfigurationProperty(replacement = PREFIX + ".order")
98126
@Override
99127
public int getOrder() {
100128
return this.order;
101129
}
102130

131+
@Deprecated
103132
public void setOrder(int order) {
104133
this.order = order;
105134
}
106135

136+
@Deprecated
137+
@DeprecatedConfigurationProperty(replacement = PREFIX + ".enabled")
107138
public boolean isEnabled() {
108139
return enabled;
109140
}
110141

142+
@Deprecated
111143
public void setEnabled(boolean enabled) {
112144
this.enabled = enabled;
113145
}
114146

147+
@Deprecated
148+
@DeprecatedConfigurationProperty(replacement = PREFIX + ".for-enabled")
115149
public boolean isForEnabled() {
116150
return forEnabled;
117151
}
118152

153+
@Deprecated
119154
public void setForEnabled(boolean forEnabled) {
120155
this.forEnabled = forEnabled;
121156
}
122157

158+
@Deprecated
159+
@DeprecatedConfigurationProperty(replacement = PREFIX + ".host-enabled")
123160
public boolean isHostEnabled() {
124161
return hostEnabled;
125162
}
126163

164+
@Deprecated
127165
public void setHostEnabled(boolean hostEnabled) {
128166
this.hostEnabled = hostEnabled;
129167
}
130168

169+
@Deprecated
170+
@DeprecatedConfigurationProperty(replacement = PREFIX + ".port-enabled")
131171
public boolean isPortEnabled() {
132172
return portEnabled;
133173
}
134174

175+
@Deprecated
135176
public void setPortEnabled(boolean portEnabled) {
136177
this.portEnabled = portEnabled;
137178
}
138179

180+
@Deprecated
181+
@DeprecatedConfigurationProperty(replacement = PREFIX + ".proto-enabled")
139182
public boolean isProtoEnabled() {
140183
return protoEnabled;
141184
}
142185

186+
@Deprecated
143187
public void setProtoEnabled(boolean protoEnabled) {
144188
this.protoEnabled = protoEnabled;
145189
}
146190

191+
@Deprecated
192+
@DeprecatedConfigurationProperty(replacement = PREFIX + ".prefix-enabled")
147193
public boolean isPrefixEnabled() {
148194
return prefixEnabled;
149195
}
@@ -152,30 +198,41 @@ public void setPrefixEnabled(boolean prefixEnabled) {
152198
this.prefixEnabled = prefixEnabled;
153199
}
154200

201+
@Deprecated
202+
@DeprecatedConfigurationProperty(replacement = PREFIX + ".for-append")
155203
public boolean isForAppend() {
156204
return forAppend;
157205
}
158206

207+
@Deprecated
159208
public void setForAppend(boolean forAppend) {
160209
this.forAppend = forAppend;
161210
}
162211

212+
@Deprecated
213+
@DeprecatedConfigurationProperty(replacement = PREFIX + ".host-append")
163214
public boolean isHostAppend() {
164215
return hostAppend;
165216
}
166217

218+
@Deprecated
167219
public void setHostAppend(boolean hostAppend) {
168220
this.hostAppend = hostAppend;
169221
}
170222

223+
@Deprecated
224+
@DeprecatedConfigurationProperty(replacement = PREFIX + ".port-append")
171225
public boolean isPortAppend() {
172226
return portAppend;
173227
}
174228

229+
@Deprecated
175230
public void setPortAppend(boolean portAppend) {
176231
this.portAppend = portAppend;
177232
}
178233

234+
@Deprecated
235+
@DeprecatedConfigurationProperty(replacement = PREFIX + ".proto-append")
179236
public boolean isProtoAppend() {
180237
return protoAppend;
181238
}
@@ -184,10 +241,13 @@ public void setProtoAppend(boolean protoAppend) {
184241
this.protoAppend = protoAppend;
185242
}
186243

244+
@Deprecated
245+
@DeprecatedConfigurationProperty(replacement = PREFIX + ".prefix-append")
187246
public boolean isPrefixAppend() {
188247
return prefixAppend;
189248
}
190249

250+
@Deprecated
191251
public void setPrefixAppend(boolean prefixAppend) {
192252
this.prefixAppend = prefixAppend;
193253
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
/*
2+
* Copyright 2013-2020 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.cloud.gateway.server.mvc.filter;
18+
19+
import org.springframework.boot.context.properties.ConfigurationProperties;
20+
import org.springframework.cloud.gateway.server.mvc.config.GatewayMvcProperties;
21+
22+
@ConfigurationProperties(XForwardedRequestHeadersFilterProperties.PREFIX)
23+
public class XForwardedRequestHeadersFilterProperties {
24+
25+
/**
26+
* XForwardedRequestHeadersFilterProperties prefix.
27+
*/
28+
public static final String PREFIX = GatewayMvcProperties.PREFIX + ".x-forwarded-request-headers-filter";
29+
30+
/** The order of the XForwardedHeadersFilter. */
31+
private int order = 0;
32+
33+
/** If the XForwardedHeadersFilter is enabled. */
34+
private boolean enabled = true;
35+
36+
/** If X-Forwarded-For is enabled. */
37+
private boolean forEnabled = true;
38+
39+
/** If X-Forwarded-Host is enabled. */
40+
private boolean hostEnabled = true;
41+
42+
/** If X-Forwarded-Port is enabled. */
43+
private boolean portEnabled = true;
44+
45+
/** If X-Forwarded-Proto is enabled. */
46+
private boolean protoEnabled = true;
47+
48+
/** If X-Forwarded-Prefix is enabled. */
49+
private boolean prefixEnabled = true;
50+
51+
/** If appending X-Forwarded-For as a list is enabled. */
52+
private boolean forAppend = true;
53+
54+
/** If appending X-Forwarded-Host as a list is enabled. */
55+
private boolean hostAppend = true;
56+
57+
/** If appending X-Forwarded-Port as a list is enabled. */
58+
private boolean portAppend = true;
59+
60+
/** If appending X-Forwarded-Proto as a list is enabled. */
61+
private boolean protoAppend = true;
62+
63+
/** If appending X-Forwarded-Prefix as a list is enabled. */
64+
private boolean prefixAppend = true;
65+
66+
public int getOrder() {
67+
return this.order;
68+
}
69+
70+
public void setOrder(int order) {
71+
this.order = order;
72+
}
73+
74+
public boolean isEnabled() {
75+
return enabled;
76+
}
77+
78+
public void setEnabled(boolean enabled) {
79+
this.enabled = enabled;
80+
}
81+
82+
public boolean isForEnabled() {
83+
return forEnabled;
84+
}
85+
86+
public void setForEnabled(boolean forEnabled) {
87+
this.forEnabled = forEnabled;
88+
}
89+
90+
public boolean isHostEnabled() {
91+
return hostEnabled;
92+
}
93+
94+
public void setHostEnabled(boolean hostEnabled) {
95+
this.hostEnabled = hostEnabled;
96+
}
97+
98+
public boolean isPortEnabled() {
99+
return portEnabled;
100+
}
101+
102+
public void setPortEnabled(boolean portEnabled) {
103+
this.portEnabled = portEnabled;
104+
}
105+
106+
public boolean isProtoEnabled() {
107+
return protoEnabled;
108+
}
109+
110+
public void setProtoEnabled(boolean protoEnabled) {
111+
this.protoEnabled = protoEnabled;
112+
}
113+
114+
public boolean isPrefixEnabled() {
115+
return prefixEnabled;
116+
}
117+
118+
public void setPrefixEnabled(boolean prefixEnabled) {
119+
this.prefixEnabled = prefixEnabled;
120+
}
121+
122+
public boolean isForAppend() {
123+
return forAppend;
124+
}
125+
126+
public void setForAppend(boolean forAppend) {
127+
this.forAppend = forAppend;
128+
}
129+
130+
public boolean isHostAppend() {
131+
return hostAppend;
132+
}
133+
134+
public void setHostAppend(boolean hostAppend) {
135+
this.hostAppend = hostAppend;
136+
}
137+
138+
public boolean isPortAppend() {
139+
return portAppend;
140+
}
141+
142+
public void setPortAppend(boolean portAppend) {
143+
this.portAppend = portAppend;
144+
}
145+
146+
public boolean isProtoAppend() {
147+
return protoAppend;
148+
}
149+
150+
public void setProtoAppend(boolean protoAppend) {
151+
this.protoAppend = protoAppend;
152+
}
153+
154+
public boolean isPrefixAppend() {
155+
return prefixAppend;
156+
}
157+
158+
public void setPrefixAppend(boolean prefixAppend) {
159+
this.prefixAppend = prefixAppend;
160+
}
161+
162+
}

0 commit comments

Comments
 (0)