Consistent java.time setters on HttpHeaders and CorsConfiguration
Closes gh-22546
This commit is contained in:
parent
d6c1a65737
commit
4a5b9d39d4
|
|
@ -77,6 +77,7 @@ public class CacheControl {
|
|||
@Nullable
|
||||
private Duration sMaxAge;
|
||||
|
||||
|
||||
/**
|
||||
* Create an empty CacheControl instance.
|
||||
* @see #empty()
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import java.nio.charset.CharsetEncoder;
|
|||
import java.nio.charset.StandardCharsets;
|
||||
import java.text.DecimalFormat;
|
||||
import java.text.DecimalFormatSymbols;
|
||||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
import java.time.ZoneId;
|
||||
import java.time.ZonedDateTime;
|
||||
|
|
@ -588,6 +589,14 @@ public class HttpHeaders implements MultiValueMap<String, String>, Serializable
|
|||
return getValuesAsList(ACCESS_CONTROL_EXPOSE_HEADERS);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the (new) value of the {@code Access-Control-Max-Age} response header.
|
||||
* @since 5.2
|
||||
*/
|
||||
public void setAccessControlMaxAge(Duration maxAge) {
|
||||
set(ACCESS_CONTROL_MAX_AGE, Long.toString(maxAge.getSeconds()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the (new) value of the {@code Access-Control-Max-Age} response header.
|
||||
*/
|
||||
|
|
@ -928,6 +937,24 @@ public class HttpHeaders implements MultiValueMap<String, String>, Serializable
|
|||
return (StringUtils.hasLength(value) ? MediaType.parseMediaType(value) : null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the date and time at which the message was created, as specified
|
||||
* by the {@code Date} header.
|
||||
* @since 5.2
|
||||
*/
|
||||
public void setDate(ZonedDateTime date) {
|
||||
setZonedDateTime(DATE, date);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the date and time at which the message was created, as specified
|
||||
* by the {@code Date} header.
|
||||
* @since 5.2
|
||||
*/
|
||||
public void setDate(Instant date) {
|
||||
setInstant(DATE, date);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the date and time at which the message was created, as specified
|
||||
* by the {@code Date} header.
|
||||
|
|
@ -981,6 +1008,15 @@ public class HttpHeaders implements MultiValueMap<String, String>, Serializable
|
|||
setZonedDateTime(EXPIRES, expires);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the date and time at which the message is no longer valid,
|
||||
* as specified by the {@code Expires} header.
|
||||
* @since 5.2
|
||||
*/
|
||||
public void setExpires(Instant expires) {
|
||||
setInstant(EXPIRES, expires);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the date and time at which the message is no longer valid,
|
||||
* as specified by the {@code Expires} header.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2018 the original author or authors.
|
||||
* Copyright 2002-2019 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.
|
||||
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
package org.springframework.web.cors;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
|
|
@ -52,14 +53,14 @@ public class CorsConfiguration {
|
|||
/** Wildcard representing <em>all</em> origins, methods, or headers. */
|
||||
public static final String ALL = "*";
|
||||
|
||||
private static final List<HttpMethod> DEFAULT_METHODS =
|
||||
Collections.unmodifiableList(Arrays.asList(HttpMethod.GET, HttpMethod.HEAD));
|
||||
private static final List<HttpMethod> DEFAULT_METHODS = Collections.unmodifiableList(
|
||||
Arrays.asList(HttpMethod.GET, HttpMethod.HEAD));
|
||||
|
||||
private static final List<String> DEFAULT_PERMIT_ALL =
|
||||
Collections.unmodifiableList(Arrays.asList(ALL));
|
||||
private static final List<String> DEFAULT_PERMIT_METHODS = Collections.unmodifiableList(
|
||||
Arrays.asList(HttpMethod.GET.name(), HttpMethod.HEAD.name(), HttpMethod.POST.name()));
|
||||
|
||||
private static final List<String> DEFAULT_PERMIT_METHODS =
|
||||
Collections.unmodifiableList(Arrays.asList(HttpMethod.GET.name(), HttpMethod.HEAD.name(), HttpMethod.POST.name()));
|
||||
private static final List<String> DEFAULT_PERMIT_ALL = Collections.unmodifiableList(
|
||||
Collections.singletonList(ALL));
|
||||
|
||||
|
||||
@Nullable
|
||||
|
|
@ -304,6 +305,16 @@ public class CorsConfiguration {
|
|||
return this.allowCredentials;
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure how long, as a duration, the response from a pre-flight request
|
||||
* can be cached by clients.
|
||||
* @since 5.2
|
||||
* @see #setMaxAge(Long)
|
||||
*/
|
||||
public void setMaxAge(Duration maxAge) {
|
||||
this.maxAge = maxAge.getSeconds();
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure how long, in seconds, the response from a pre-flight request
|
||||
* can be cached by clients.
|
||||
|
|
@ -322,22 +333,21 @@ public class CorsConfiguration {
|
|||
return this.maxAge;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* By default a newly created {@code CorsConfiguration} does not permit any
|
||||
* cross-origin requests and must be configured explicitly to indicate what
|
||||
* should be allowed.
|
||||
*
|
||||
* <p>Use this method to flip the initialization model to start with open
|
||||
* defaults that permit all cross-origin requests for GET, HEAD, and POST
|
||||
* requests. Note however that this method will not override any existing
|
||||
* values already set.
|
||||
*
|
||||
* <p>The following defaults are applied if not already set:
|
||||
* <ul>
|
||||
* <li>Allow all origins.</li>
|
||||
* <li>Allow "simple" methods {@code GET}, {@code HEAD} and {@code POST}.</li>
|
||||
* <li>Allow all headers.</li>
|
||||
* <li>Set max age to 1800 seconds (30 minutes).</li>
|
||||
* <li>Allow all origins.</li>
|
||||
* <li>Allow "simple" methods {@code GET}, {@code HEAD} and {@code POST}.</li>
|
||||
* <li>Allow all headers.</li>
|
||||
* <li>Set max age to 1800 seconds (30 minutes).</li>
|
||||
* </ul>
|
||||
*/
|
||||
public CorsConfiguration applyPermitDefaultValues() {
|
||||
|
|
@ -361,23 +371,19 @@ public class CorsConfiguration {
|
|||
/**
|
||||
* Combine the non-null properties of the supplied
|
||||
* {@code CorsConfiguration} with this one.
|
||||
*
|
||||
* <p>When combining single values like {@code allowCredentials} or
|
||||
* {@code maxAge}, {@code this} properties are overridden by non-null
|
||||
* {@code other} properties if any.
|
||||
*
|
||||
* <p>Combining lists like {@code allowedOrigins}, {@code allowedMethods},
|
||||
* {@code allowedHeaders} or {@code exposedHeaders} is done in an additive
|
||||
* way. For example, combining {@code ["GET", "POST"]} with
|
||||
* {@code ["PATCH"]} results in {@code ["GET", "POST", "PATCH"]}, but keep
|
||||
* in mind that combining {@code ["GET", "POST"]} with {@code ["*"]}
|
||||
* results in {@code ["*"]}.
|
||||
*
|
||||
* <p>Notice that default permit values set by
|
||||
* {@link CorsConfiguration#applyPermitDefaultValues()} are overridden by
|
||||
* any value explicitly defined.
|
||||
*
|
||||
* @return the combined {@code CorsConfiguration} or {@code this}
|
||||
* @return the combined {@code CorsConfiguration}, or {@code this}
|
||||
* configuration if the supplied configuration is {@code null}
|
||||
*/
|
||||
@Nullable
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2016 the original author or authors.
|
||||
* Copyright 2002-2019 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.
|
||||
|
|
@ -47,7 +47,7 @@ public class CorsConfigurationTests {
|
|||
assertNull(config.getExposedHeaders());
|
||||
config.setAllowCredentials(null);
|
||||
assertNull(config.getAllowCredentials());
|
||||
config.setMaxAge(null);
|
||||
config.setMaxAge((Long) null);
|
||||
assertNull(config.getMaxAge());
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue