|  | @@ -28,7 +28,7 @@ import org.springframework.test.web.reactive.server.FluxExchangeResult;
 | 
	
		
			
				|  |  |  import org.springframework.test.web.reactive.server.WebTestClient;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import java.time.Duration;
 | 
	
		
			
				|  |  | -import java.util.Collections;
 | 
	
		
			
				|  |  | +import java.util.HashSet;
 | 
	
		
			
				|  |  |  import java.util.List;
 | 
	
		
			
				|  |  |  import java.util.Map;
 | 
	
		
			
				|  |  |  import java.util.Set;
 | 
	
	
		
			
				|  | @@ -45,7 +45,7 @@ public class HeaderSpecTests {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	HttpHeaders expectedHeaders = new HttpHeaders();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	Set<String> ignoredHeaderNames = Collections.singleton(HttpHeaders.CONTENT_TYPE);
 | 
	
		
			
				|  |  | +	Set<String> headerNamesNotPresent = new HashSet<>();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	@Before
 | 
	
		
			
				|  |  |  	public void setup() {
 | 
	
	
		
			
				|  | @@ -67,9 +67,7 @@ public class HeaderSpecTests {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	@Test
 | 
	
		
			
				|  |  |  	public void headersWhenCacheDisableThenCacheNotWritten() {
 | 
	
		
			
				|  |  | -		this.expectedHeaders.remove(HttpHeaders.CACHE_CONTROL);
 | 
	
		
			
				|  |  | -		this.expectedHeaders.remove(HttpHeaders.PRAGMA);
 | 
	
		
			
				|  |  | -		this.expectedHeaders.remove(HttpHeaders.EXPIRES);
 | 
	
		
			
				|  |  | +		expectHeaderNamesNotPresent(HttpHeaders.CACHE_CONTROL, HttpHeaders.PRAGMA, HttpHeaders.EXPIRES);
 | 
	
		
			
				|  |  |  		this.headers.cache().disable();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		assertHeaders();
 | 
	
	
		
			
				|  | @@ -77,7 +75,7 @@ public class HeaderSpecTests {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	@Test
 | 
	
		
			
				|  |  |  	public void headersWhenContentOptionsDisableThenContentTypeOptionsNotWritten() {
 | 
	
		
			
				|  |  | -		this.expectedHeaders.remove(ContentTypeOptionsServerHttpHeadersWriter.X_CONTENT_OPTIONS);
 | 
	
		
			
				|  |  | +		expectHeaderNamesNotPresent(ContentTypeOptionsServerHttpHeadersWriter.X_CONTENT_OPTIONS);
 | 
	
		
			
				|  |  |  		this.headers.contentTypeOptions().disable();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		assertHeaders();
 | 
	
	
		
			
				|  | @@ -85,7 +83,7 @@ public class HeaderSpecTests {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	@Test
 | 
	
		
			
				|  |  |  	public void headersWhenHstsDisableThenHstsNotWritten() {
 | 
	
		
			
				|  |  | -		this.expectedHeaders.remove(StrictTransportSecurityServerHttpHeadersWriter.STRICT_TRANSPORT_SECURITY);
 | 
	
		
			
				|  |  | +		expectHeaderNamesNotPresent(StrictTransportSecurityServerHttpHeadersWriter.STRICT_TRANSPORT_SECURITY);
 | 
	
		
			
				|  |  |  		this.headers.hsts().disable();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		assertHeaders();
 | 
	
	
		
			
				|  | @@ -103,7 +101,7 @@ public class HeaderSpecTests {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	@Test
 | 
	
		
			
				|  |  |  	public void headersWhenFrameOptionsDisableThenFrameOptionsNotWritten() {
 | 
	
		
			
				|  |  | -		this.expectedHeaders.remove(XFrameOptionsServerHttpHeadersWriter.X_FRAME_OPTIONS);
 | 
	
		
			
				|  |  | +		expectHeaderNamesNotPresent(XFrameOptionsServerHttpHeadersWriter.X_FRAME_OPTIONS);
 | 
	
		
			
				|  |  |  		this.headers.frameOptions().disable();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		assertHeaders();
 | 
	
	
		
			
				|  | @@ -111,9 +109,7 @@ public class HeaderSpecTests {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	@Test
 | 
	
		
			
				|  |  |  	public void headersWhenFrameOptionsModeThenFrameOptionsCustomMode() {
 | 
	
		
			
				|  |  | -		this.expectedHeaders.remove(XFrameOptionsServerHttpHeadersWriter.X_FRAME_OPTIONS);
 | 
	
		
			
				|  |  | -		this.expectedHeaders
 | 
	
		
			
				|  |  | -			.add(XFrameOptionsServerHttpHeadersWriter.X_FRAME_OPTIONS, "SAMEORIGIN");
 | 
	
		
			
				|  |  | +		this.expectedHeaders.set(XFrameOptionsServerHttpHeadersWriter.X_FRAME_OPTIONS, "SAMEORIGIN");
 | 
	
		
			
				|  |  |  		this.headers.frameOptions().mode(XFrameOptionsServerHttpHeadersWriter.Mode.SAMEORIGIN);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		assertHeaders();
 | 
	
	
		
			
				|  | @@ -121,12 +117,19 @@ public class HeaderSpecTests {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	@Test
 | 
	
		
			
				|  |  |  	public void headersWhenXssProtectionDisableThenXssProtectionNotWritten() {
 | 
	
		
			
				|  |  | -		this.expectedHeaders.remove("X-Xss-Protection");
 | 
	
		
			
				|  |  | +		expectHeaderNamesNotPresent("X-Xss-Protection");
 | 
	
		
			
				|  |  |  		this.headers.xssProtection().disable();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		assertHeaders();
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	private void expectHeaderNamesNotPresent(String... headerNames) {
 | 
	
		
			
				|  |  | +		for(String headerName : headerNames) {
 | 
	
		
			
				|  |  | +			this.expectedHeaders.remove(headerName);
 | 
	
		
			
				|  |  | +			this.headerNamesNotPresent.add(headerName);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	private void assertHeaders() {
 | 
	
		
			
				|  |  |  		WebTestClient client = buildClient();
 | 
	
		
			
				|  |  |  		FluxExchangeResult<String> response = client.get()
 | 
	
	
		
			
				|  | @@ -135,10 +138,12 @@ public class HeaderSpecTests {
 | 
	
		
			
				|  |  |  			.returnResult(String.class);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		Map<String, List<String>> responseHeaders = response.getResponseHeaders();
 | 
	
		
			
				|  |  | -		this.ignoredHeaderNames.stream().forEach(responseHeaders::remove);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		assertThat(responseHeaders).describedAs(response.toString()).isEqualTo(
 | 
	
		
			
				|  |  | +		assertThat(responseHeaders).describedAs(response.toString()).containsAllEntriesOf(
 | 
	
		
			
				|  |  |  			this.expectedHeaders);
 | 
	
		
			
				|  |  | +		if (!this.headerNamesNotPresent.isEmpty()) {
 | 
	
		
			
				|  |  | +			assertThat(responseHeaders.keySet()).doesNotContainAnyElementsOf(this.headerNamesNotPresent);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	private WebTestClient buildClient() {
 |