Skip to content

Commit b883487

Browse files
committed
Bumping versions
1 parent a2b86a2 commit b883487

File tree

5 files changed

+42
-40
lines changed

5 files changed

+42
-40
lines changed

docs/modules/ROOT/partials/_configprops.adoc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,14 @@
4949
|spring.cloud.gateway.filter.save-session.enabled | `+++true+++` | Enables the save-session filter.
5050
|spring.cloud.gateway.filter.secure-headers.content-security-policy | `+++default-src 'self' https:; font-src 'self' https: data:; img-src 'self' https: data:; object-src 'none'; script-src https:; style-src 'self' https: 'unsafe-inline'+++` |
5151
|spring.cloud.gateway.filter.secure-headers.content-type-options | `+++nosniff+++` |
52+
|spring.cloud.gateway.filter.secure-headers.default-headers | |
5253
|spring.cloud.gateway.filter.secure-headers.disable | |
54+
|spring.cloud.gateway.filter.secure-headers.disabled-headers | |
5355
|spring.cloud.gateway.filter.secure-headers.download-options | `+++noopen+++` |
5456
|spring.cloud.gateway.filter.secure-headers.enabled | `+++true+++` | Enables the secure-headers filter.
57+
|spring.cloud.gateway.filter.secure-headers.enabled-headers | |
5558
|spring.cloud.gateway.filter.secure-headers.frame-options | `+++DENY+++` |
59+
|spring.cloud.gateway.filter.secure-headers.permissions-policy | `+++accelerometer=(), ambient-light-sensor=(), autoplay=(), battery=(), camera=(), cross-origin-isolated=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(), geolocation=(), gyroscope=(), keyboard-map=(), magnetometer=(), microphone=(), midi=(), navigation-override=(), payment=(), picture-in-picture=(), publickey-credentials-get=(), screen-wake-lock=(), sync-xhr=(), usb=(), web-share=(), xr-spatial-tracking=()+++` |
5660
|spring.cloud.gateway.filter.secure-headers.permitted-cross-domain-policies | `+++none+++` |
5761
|spring.cloud.gateway.filter.secure-headers.referrer-policy | `+++no-referrer+++` |
5862
|spring.cloud.gateway.filter.secure-headers.strict-transport-security | `+++max-age=631138519+++` |

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

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ public class SecureHeadersGatewayFilterFactory
8383
*/
8484
public static final String X_PERMITTED_CROSS_DOMAIN_POLICIES_HEADER = SecureHeadersProperties.X_PERMITTED_CROSS_DOMAIN_POLICIES_HEADER;
8585

86-
8786
private final SecureHeadersProperties properties;
8887

8988
public SecureHeadersGatewayFilterFactory(SecureHeadersProperties properties) {
@@ -106,8 +105,9 @@ public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
106105
Set<String> headersToAddToResponse = assembleHeaders(originalConfig, properties);
107106

108107
Config config = originalConfig.withDefaults(properties);
109-
return chain.filter(exchange).then(Mono.fromRunnable(() ->
110-
applySecurityHeaders(responseHeaders, headersToAddToResponse, config)));
108+
return chain.filter(exchange)
109+
.then(Mono
110+
.fromRunnable(() -> applySecurityHeaders(responseHeaders, headersToAddToResponse, config)));
111111
}
112112

113113
@Override
@@ -120,36 +120,32 @@ public String toString() {
120120
/**
121121
* Applies security headers to the response using the given filter configuration.
122122
* @param responseHeaders - the http headers of the response
123-
* @param headersToAddToResponse - the security headers that are to be added to the response
123+
* @param headersToAddToResponse - the security headers that are to be added to the
124+
* response
124125
* @param config - the security filter configuration
125126
*/
126127
private void applySecurityHeaders(HttpHeaders responseHeaders, Set<String> headersToAddToResponse, Config config) {
127128

128-
addHeaderIfEnabled(responseHeaders, headersToAddToResponse,
129-
SecureHeadersProperties.X_XSS_PROTECTION_HEADER, config.getXssProtectionHeaderValue());
129+
addHeaderIfEnabled(responseHeaders, headersToAddToResponse, SecureHeadersProperties.X_XSS_PROTECTION_HEADER,
130+
config.getXssProtectionHeaderValue());
130131

131132
addHeaderIfEnabled(responseHeaders, headersToAddToResponse,
132133
SecureHeadersProperties.STRICT_TRANSPORT_SECURITY_HEADER,
133134
config.getStrictTransportSecurityHeaderValue());
134135

135-
addHeaderIfEnabled(responseHeaders, headersToAddToResponse,
136-
SecureHeadersProperties.X_FRAME_OPTIONS_HEADER,
136+
addHeaderIfEnabled(responseHeaders, headersToAddToResponse, SecureHeadersProperties.X_FRAME_OPTIONS_HEADER,
137137
config.getFrameOptionsHeaderValue());
138138

139139
addHeaderIfEnabled(responseHeaders, headersToAddToResponse,
140-
SecureHeadersProperties.X_CONTENT_TYPE_OPTIONS_HEADER,
141-
config.getContentTypeOptionsHeaderValue());
140+
SecureHeadersProperties.X_CONTENT_TYPE_OPTIONS_HEADER, config.getContentTypeOptionsHeaderValue());
142141

143-
addHeaderIfEnabled(responseHeaders, headersToAddToResponse,
144-
SecureHeadersProperties.REFERRER_POLICY_HEADER,
142+
addHeaderIfEnabled(responseHeaders, headersToAddToResponse, SecureHeadersProperties.REFERRER_POLICY_HEADER,
145143
config.getReferrerPolicyHeaderValue());
146144

147145
addHeaderIfEnabled(responseHeaders, headersToAddToResponse,
148-
SecureHeadersProperties.CONTENT_SECURITY_POLICY_HEADER,
149-
config.getContentSecurityPolicyHeaderValue());
146+
SecureHeadersProperties.CONTENT_SECURITY_POLICY_HEADER, config.getContentSecurityPolicyHeaderValue());
150147

151-
addHeaderIfEnabled(responseHeaders, headersToAddToResponse,
152-
SecureHeadersProperties.X_DOWNLOAD_OPTIONS_HEADER,
148+
addHeaderIfEnabled(responseHeaders, headersToAddToResponse, SecureHeadersProperties.X_DOWNLOAD_OPTIONS_HEADER,
153149
config.getDownloadOptionsHeaderValue());
154150

155151
addHeaderIfEnabled(responseHeaders, headersToAddToResponse,
@@ -164,15 +160,14 @@ private void applySecurityHeaders(HttpHeaders responseHeaders, Set<String> heade
164160
}
165161
}
166162

167-
addHeaderIfEnabled(responseHeaders, headersToAddToResponse,
168-
SecureHeadersProperties.PERMISSIONS_POLICY_HEADER,
163+
addHeaderIfEnabled(responseHeaders, headersToAddToResponse, SecureHeadersProperties.PERMISSIONS_POLICY_HEADER,
169164
permissionPolicyHeaderValue);
170165
}
171166

172167
/**
173-
* Assembles the set of security headers that are to be applied to the response
174-
* - When route specific arguments are set, route specific headers are applied.
175-
* - When no route specific arguments are set, global default headers are applied.
168+
* Assembles the set of security headers that are to be applied to the response - When
169+
* route specific arguments are set, route specific headers are applied. - When no
170+
* route specific arguments are set, global default headers are applied.
176171
* @param config - the global / route configuration supplied
177172
* @param properties - default security headers configuration provided
178173
* @return set of security headers that are to be added to the response
@@ -190,8 +185,8 @@ private Set<String> assembleHeaders(Config config, SecureHeadersProperties prope
190185
return headersToAddToResponse;
191186
}
192187

193-
194-
private void addHeaderIfEnabled(HttpHeaders headers, Set<String> headersToAdd, String headerName, String headerValue) {
188+
private void addHeaderIfEnabled(HttpHeaders headers, Set<String> headersToAdd, String headerName,
189+
String headerValue) {
195190
if (headersToAdd.contains(headerName.toLowerCase(Locale.ROOT))) {
196191
headers.addIfAbsent(headerName, headerValue);
197192
}
@@ -362,7 +357,9 @@ public void setPermissionPolicyHeaderValue(String permissionPolicyHeaderValue) {
362357
void setEnable(Set<String> enable) {
363358
if (enable != null) {
364359
this.routeFilterConfigProvided = true;
365-
this.routeEnabledHeaders = enable.stream().map(String::toLowerCase).collect(Collectors.toUnmodifiableSet());
360+
this.routeEnabledHeaders = enable.stream()
361+
.map(String::toLowerCase)
362+
.collect(Collectors.toUnmodifiableSet());
366363
}
367364
}
368365

@@ -379,7 +376,9 @@ Set<String> getRouteEnabledHeaders() {
379376
void setDisable(Set<String> disable) {
380377
if (disable != null) {
381378
this.routeFilterConfigProvided = true;
382-
this.routeDisabledHeaders = disable.stream().map(String::toLowerCase).collect(Collectors.toUnmodifiableSet());
379+
this.routeDisabledHeaders = disable.stream()
380+
.map(String::toLowerCase)
381+
.collect(Collectors.toUnmodifiableSet());
383382
}
384383
}
385384

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

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -126,11 +126,10 @@ public class SecureHeadersProperties {
126126
+ "navigation-override=(), payment=(), picture-in-picture=(), publickey-credentials-get=(), "
127127
+ "screen-wake-lock=(), sync-xhr=(), usb=(), web-share=(), xr-spatial-tracking=()";
128128

129-
130129
/**
131-
* Default constructor for {@link SecureHeadersProperties}.
132-
* Initializes the `defaultHeaders` set with a predefined list of security headers.
133-
* The headers are transformed to lowercase for case-insensitive comparison.
130+
* Default constructor for {@link SecureHeadersProperties}. Initializes the
131+
* `defaultHeaders` set with a predefined list of security headers. The headers are
132+
* transformed to lowercase for case-insensitive comparison.
134133
**/
135134
public SecureHeadersProperties() {
136135

@@ -249,8 +248,8 @@ public List<String> getDisable() {
249248
}
250249

251250
/**
252-
* Binds the list of default/opt-out header names to disable, transforms them into a lowercase set.
253-
* This is to ensure case-insensitive comparison.
251+
* Binds the list of default/opt-out header names to disable, transforms them into a
252+
* lowercase set. This is to ensure case-insensitive comparison.
254253
* @param disable - list of default/opt-out header names to disable
255254
*/
256255
public void setDisable(List<String> disable) {
@@ -267,8 +266,8 @@ public Set<String> getEnabledHeaders() {
267266
}
268267

269268
/**
270-
* Binds the list of default/opt-out header names to enable, transforms them into a lowercase set.
271-
* This is to ensure case-insensitive comparison.
269+
* Binds the list of default/opt-out header names to enable, transforms them into a
270+
* lowercase set. This is to ensure case-insensitive comparison.
272271
* @param enable - list of default/opt-out header enable
273272
*/
274273
public void setEnable(List<String> enable) {

spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SecureHeadersGatewayFilterFactoryTests.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,10 @@
4949
public class SecureHeadersGatewayFilterFactoryTests extends BaseWebClientTests {
5050

5151
/**
52-
* This test ensures that the response includes a set of default security headers,
53-
* which are defined in {@link SecureHeadersProperties}. It also confirms that the
54-
* opt-in "Permissions-Policy" header is not included in the response.
55-
*/
52+
* This test ensures that the response includes a set of default security headers,
53+
* which are defined in {@link SecureHeadersProperties}. It also confirms that the
54+
* opt-in "Permissions-Policy" header is not included in the response.
55+
*/
5656
@Test
5757
public void secureHeadersFilterWorks() {
5858
Mono<ClientResponse> result = webClient.get()

spring-cloud-gateway-server/src/test/java/org/springframework/cloud/gateway/filter/factory/SecureHeadersGatewayFilterFactoryUnitTests.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,8 @@ public void applyCompositionWithDisabledHeadersAndPermissionPolicy() {
242242
@Test
243243
public void overrideDefaultInSecurityPropertiesWhenRouteConfigIsProvided() {
244244

245-
SecureHeadersGatewayFilterFactory filterFactory = new SecureHeadersGatewayFilterFactory(new SecureHeadersProperties());
245+
SecureHeadersGatewayFilterFactory filterFactory = new SecureHeadersGatewayFilterFactory(
246+
new SecureHeadersProperties());
246247

247248
Config config = new Config();
248249
config.setDisable(Set.of("strict-transport-security"));
@@ -256,8 +257,7 @@ public void overrideDefaultInSecurityPropertiesWhenRouteConfigIsProvided() {
256257
ServerHttpResponse response = exchange.getResponse();
257258
assertThat(response.getHeaders()).containsOnlyKeys(X_XSS_PROTECTION_HEADER, X_FRAME_OPTIONS_HEADER,
258259
X_CONTENT_TYPE_OPTIONS_HEADER, REFERRER_POLICY_HEADER, CONTENT_SECURITY_POLICY_HEADER,
259-
X_DOWNLOAD_OPTIONS_HEADER, X_PERMITTED_CROSS_DOMAIN_POLICIES_HEADER,
260-
PERMISSIONS_POLICY_HEADER);
260+
X_DOWNLOAD_OPTIONS_HEADER, X_PERMITTED_CROSS_DOMAIN_POLICIES_HEADER, PERMISSIONS_POLICY_HEADER);
261261
assertThat(response.getHeaders().get(PERMISSIONS_POLICY_HEADER)).containsExactly("camera=*");
262262
}
263263

0 commit comments

Comments
 (0)