| 
					
				 | 
			
			
				@@ -77,19 +77,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				HttpHeaders.CACHE_CONTROL, HttpHeaders.EXPIRES, HttpHeaders.PRAGMA, HttpHeaders.X_XSS_PROTECTION); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	static class HeadersConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		protected void configure(HttpSecurity http) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// @formatter:off 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			http 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.headers(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// @formatter:on 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	public void getWhenHeadersConfiguredInLambdaThenDefaultHeadersInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		this.spring.register(HeadersInLambdaConfig.class).autowire(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -108,27 +95,373 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				HttpHeaders.CACHE_CONTROL, HttpHeaders.EXPIRES, HttpHeaders.PRAGMA, HttpHeaders.X_XSS_PROTECTION); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenHeaderDefaultsDisabledAndContentTypeConfiguredThenOnlyContentTypeHeaderInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(ContentTypeOptionsConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andExpect(header().string(HttpHeaders.X_CONTENT_TYPE_OPTIONS, "nosniff")).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.X_CONTENT_TYPE_OPTIONS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenOnlyContentTypeConfiguredInLambdaThenOnlyContentTypeHeaderInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(ContentTypeOptionsInLambdaConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andExpect(header().string(HttpHeaders.X_CONTENT_TYPE_OPTIONS, "nosniff")).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.X_CONTENT_TYPE_OPTIONS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenHeaderDefaultsDisabledAndFrameOptionsConfiguredThenOnlyFrameOptionsHeaderInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(FrameOptionsConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andExpect(header().string(HttpHeaders.X_FRAME_OPTIONS, XFrameOptionsMode.DENY.name())).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.X_FRAME_OPTIONS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenHeaderDefaultsDisabledAndHstsConfiguredThenOnlyStrictTransportSecurityHeaderInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(HstsConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andExpect( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						header().string(HttpHeaders.STRICT_TRANSPORT_SECURITY, "max-age=31536000 ; includeSubDomains")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.STRICT_TRANSPORT_SECURITY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenHeaderDefaultsDisabledAndCacheControlConfiguredThenCacheControlAndExpiresAndPragmaHeadersInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(CacheControlConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andExpect(header().string(HttpHeaders.CACHE_CONTROL, "no-cache, no-store, max-age=0, must-revalidate")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andExpect(header().string(HttpHeaders.EXPIRES, "0")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andExpect(header().string(HttpHeaders.PRAGMA, "no-cache")).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactlyInAnyOrder(HttpHeaders.CACHE_CONTROL, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				HttpHeaders.EXPIRES, HttpHeaders.PRAGMA); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenOnlyCacheControlConfiguredInLambdaThenCacheControlAndExpiresAndPragmaHeadersInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(CacheControlInLambdaConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andExpect(header().string(HttpHeaders.CACHE_CONTROL, "no-cache, no-store, max-age=0, must-revalidate")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andExpect(header().string(HttpHeaders.EXPIRES, "0")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andExpect(header().string(HttpHeaders.PRAGMA, "no-cache")).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactlyInAnyOrder(HttpHeaders.CACHE_CONTROL, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				HttpHeaders.EXPIRES, HttpHeaders.PRAGMA); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenHeaderDefaultsDisabledAndXssProtectionConfiguredThenOnlyXssProtectionHeaderInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(XssProtectionConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andExpect(header().string(HttpHeaders.X_XSS_PROTECTION, "1; mode=block")).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.X_XSS_PROTECTION); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenOnlyXssProtectionConfiguredInLambdaThenOnlyXssProtectionHeaderInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(XssProtectionInLambdaConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andExpect(header().string(HttpHeaders.X_XSS_PROTECTION, "1; mode=block")).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.X_XSS_PROTECTION); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenFrameOptionsSameOriginConfiguredThenFrameOptionsHeaderHasValueSameOrigin() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(HeadersCustomSameOriginConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andExpect(header().string(HttpHeaders.X_FRAME_OPTIONS, XFrameOptionsMode.SAMEORIGIN.name())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenFrameOptionsSameOriginConfiguredInLambdaThenFrameOptionsHeaderHasValueSameOrigin() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(HeadersCustomSameOriginInLambdaConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andExpect(header().string(HttpHeaders.X_FRAME_OPTIONS, XFrameOptionsMode.SAMEORIGIN.name())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenHeaderDefaultsDisabledAndPublicHpkpWithNoPinThenNoHeadersInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(HpkpConfigNoPins.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/")).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).isEmpty(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenSecureRequestAndHpkpWithPinThenPublicKeyPinsReportOnlyHeaderInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(HpkpConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andExpect(header().string(HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						"max-age=5184000 ; pin-sha256=\"d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=\"")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenInsecureRequestHeaderDefaultsDisabledAndHpkpWithPinThenNoHeadersInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(HpkpConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/")).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).isEmpty(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenHpkpWithMultiplePinsThenPublicKeyPinsReportOnlyHeaderWithMultiplePinsInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(HpkpConfigWithPins.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)).andExpect(header().string( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				"max-age=5184000 ; pin-sha256=\"d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=\" ; pin-sha256=\"E9CZ9INDbd+2eRQozYqqbQ2yXLVKB9+xcprMF+44U1g=\"")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenHpkpWithCustomAgeThenPublicKeyPinsReportOnlyHeaderWithCustomAgeInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(HpkpConfigCustomAge.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andExpect(header().string(HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						"max-age=604800 ; pin-sha256=\"d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=\"")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenHpkpWithReportOnlyFalseThenPublicKeyPinsHeaderInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(HpkpConfigTerminateConnection.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andExpect(header().string(HttpHeaders.PUBLIC_KEY_PINS, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						"max-age=5184000 ; pin-sha256=\"d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=\"")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.PUBLIC_KEY_PINS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenHpkpIncludeSubdomainThenPublicKeyPinsReportOnlyHeaderWithIncludeSubDomainsInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(HpkpConfigIncludeSubDomains.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)).andExpect(header().string( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				"max-age=5184000 ; pin-sha256=\"d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=\" ; includeSubDomains")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenHpkpWithReportUriThenPublicKeyPinsReportOnlyHeaderWithReportUriInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(HpkpConfigWithReportURI.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)).andExpect(header().string( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				"max-age=5184000 ; pin-sha256=\"d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=\" ; report-uri=\"https://example.net/pkp-report\"")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenHpkpWithReportUriAsStringThenPublicKeyPinsReportOnlyHeaderWithReportUriInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(HpkpConfigWithReportURIAsString.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)).andExpect(header().string( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				"max-age=5184000 ; pin-sha256=\"d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=\" ; report-uri=\"https://example.net/pkp-report\"")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenHpkpWithReportUriInLambdaThenPublicKeyPinsReportOnlyHeaderWithReportUriInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(HpkpWithReportUriInLambdaConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)).andExpect(header().string( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				"max-age=5184000 ; pin-sha256=\"d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=\" ; report-uri=\"https://example.net/pkp-report\"")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenContentSecurityPolicyConfiguredThenContentSecurityPolicyHeaderInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(ContentSecurityPolicyDefaultConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andExpect(header().string(HttpHeaders.CONTENT_SECURITY_POLICY, "default-src 'self'")).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.CONTENT_SECURITY_POLICY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenContentSecurityPolicyWithReportOnlyThenContentSecurityPolicyReportOnlyHeaderInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(ContentSecurityPolicyReportOnlyConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andExpect(header().string(HttpHeaders.CONTENT_SECURITY_POLICY_REPORT_ONLY, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						"default-src 'self'; script-src trustedscripts.example.com")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.containsExactly(HttpHeaders.CONTENT_SECURITY_POLICY_REPORT_ONLY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenContentSecurityPolicyWithReportOnlyInLambdaThenContentSecurityPolicyReportOnlyHeaderInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(ContentSecurityPolicyReportOnlyInLambdaConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andExpect(header().string(HttpHeaders.CONTENT_SECURITY_POLICY_REPORT_ONLY, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						"default-src 'self'; script-src trustedscripts.example.com")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.containsExactly(HttpHeaders.CONTENT_SECURITY_POLICY_REPORT_ONLY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void configureWhenContentSecurityPolicyEmptyThenException() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThatThrownBy(() -> this.spring.register(ContentSecurityPolicyInvalidConfig.class).autowire()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.isInstanceOf(BeanCreationException.class).hasRootCauseInstanceOf(IllegalArgumentException.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void configureWhenContentSecurityPolicyEmptyInLambdaThenException() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThatThrownBy(() -> this.spring.register(ContentSecurityPolicyInvalidInLambdaConfig.class).autowire()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.isInstanceOf(BeanCreationException.class).hasRootCauseInstanceOf(IllegalArgumentException.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void configureWhenContentSecurityPolicyNoPolicyDirectivesInLambdaThenDefaultHeaderValue() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(ContentSecurityPolicyNoDirectivesInLambdaConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andExpect(header().string(HttpHeaders.CONTENT_SECURITY_POLICY, "default-src 'self'")).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.CONTENT_SECURITY_POLICY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenReferrerPolicyConfiguredThenReferrerPolicyHeaderInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(ReferrerPolicyDefaultConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andExpect(header().string("Referrer-Policy", ReferrerPolicy.NO_REFERRER.getPolicy())).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly("Referrer-Policy"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenReferrerPolicyInLambdaThenReferrerPolicyHeaderInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(ReferrerPolicyDefaultInLambdaConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andExpect(header().string("Referrer-Policy", ReferrerPolicy.NO_REFERRER.getPolicy())).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly("Referrer-Policy"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenReferrerPolicyConfiguredWithCustomValueThenReferrerPolicyHeaderWithCustomValueInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(ReferrerPolicyCustomConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andExpect(header().string("Referrer-Policy", ReferrerPolicy.SAME_ORIGIN.getPolicy())).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly("Referrer-Policy"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenReferrerPolicyConfiguredWithCustomValueInLambdaThenCustomValueInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(ReferrerPolicyCustomInLambdaConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andExpect(header().string("Referrer-Policy", ReferrerPolicy.SAME_ORIGIN.getPolicy())).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly("Referrer-Policy"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenFeaturePolicyConfiguredThenFeaturePolicyHeaderInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(FeaturePolicyConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andExpect(header().string("Feature-Policy", "geolocation 'self'")).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly("Feature-Policy"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void configureWhenFeaturePolicyEmptyThenException() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThatThrownBy(() -> this.spring.register(FeaturePolicyInvalidConfig.class).autowire()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.isInstanceOf(BeanCreationException.class).hasRootCauseInstanceOf(IllegalArgumentException.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenHstsConfiguredWithPreloadThenStrictTransportSecurityHeaderWithPreloadInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(HstsWithPreloadConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)).andExpect(header() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.string(HttpHeaders.STRICT_TRANSPORT_SECURITY, "max-age=31536000 ; includeSubDomains ; preload")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.STRICT_TRANSPORT_SECURITY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void getWhenHstsConfiguredWithPreloadInLambdaThenStrictTransportSecurityHeaderWithPreloadInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.spring.register(HstsWithPreloadInLambdaConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)).andExpect(header() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.string(HttpHeaders.STRICT_TRANSPORT_SECURITY, "max-age=31536000 ; includeSubDomains ; preload")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.STRICT_TRANSPORT_SECURITY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	static class HeadersInLambdaConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	static class HeadersConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		protected void configure(HttpSecurity http) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// @formatter:off 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			http 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.headers(withDefaults()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.headers(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// @formatter:on 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenHeaderDefaultsDisabledAndContentTypeConfiguredThenOnlyContentTypeHeaderInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(ContentTypeOptionsConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	static class HeadersInLambdaConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		@Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		protected void configure(HttpSecurity http) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// @formatter:off 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			http 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.headers(withDefaults()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// @formatter:on 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andExpect(header().string(HttpHeaders.X_CONTENT_TYPE_OPTIONS, "nosniff")).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.X_CONTENT_TYPE_OPTIONS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -146,15 +479,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenOnlyContentTypeConfiguredInLambdaThenOnlyContentTypeHeaderInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(ContentTypeOptionsInLambdaConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andExpect(header().string(HttpHeaders.X_CONTENT_TYPE_OPTIONS, "nosniff")).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.X_CONTENT_TYPE_OPTIONS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class ContentTypeOptionsInLambdaConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -172,16 +496,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenHeaderDefaultsDisabledAndFrameOptionsConfiguredThenOnlyFrameOptionsHeaderInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(FrameOptionsConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andExpect(header().string(HttpHeaders.X_FRAME_OPTIONS, XFrameOptionsMode.DENY.name())).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.X_FRAME_OPTIONS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class FrameOptionsConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -197,18 +511,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenHeaderDefaultsDisabledAndHstsConfiguredThenOnlyStrictTransportSecurityHeaderInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(HstsConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andExpect( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						header().string(HttpHeaders.STRICT_TRANSPORT_SECURITY, "max-age=31536000 ; includeSubDomains")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.STRICT_TRANSPORT_SECURITY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class HstsConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -224,19 +526,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenHeaderDefaultsDisabledAndCacheControlConfiguredThenCacheControlAndExpiresAndPragmaHeadersInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(CacheControlConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andExpect(header().string(HttpHeaders.CACHE_CONTROL, "no-cache, no-store, max-age=0, must-revalidate")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andExpect(header().string(HttpHeaders.EXPIRES, "0")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andExpect(header().string(HttpHeaders.PRAGMA, "no-cache")).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactlyInAnyOrder(HttpHeaders.CACHE_CONTROL, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				HttpHeaders.EXPIRES, HttpHeaders.PRAGMA); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class CacheControlConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -252,19 +541,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenOnlyCacheControlConfiguredInLambdaThenCacheControlAndExpiresAndPragmaHeadersInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(CacheControlInLambdaConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andExpect(header().string(HttpHeaders.CACHE_CONTROL, "no-cache, no-store, max-age=0, must-revalidate")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andExpect(header().string(HttpHeaders.EXPIRES, "0")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andExpect(header().string(HttpHeaders.PRAGMA, "no-cache")).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactlyInAnyOrder(HttpHeaders.CACHE_CONTROL, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				HttpHeaders.EXPIRES, HttpHeaders.PRAGMA); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class CacheControlInLambdaConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -282,16 +558,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenHeaderDefaultsDisabledAndXssProtectionConfiguredThenOnlyXssProtectionHeaderInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(XssProtectionConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andExpect(header().string(HttpHeaders.X_XSS_PROTECTION, "1; mode=block")).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.X_XSS_PROTECTION); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class XssProtectionConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -307,15 +573,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenOnlyXssProtectionConfiguredInLambdaThenOnlyXssProtectionHeaderInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(XssProtectionInLambdaConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andExpect(header().string(HttpHeaders.X_XSS_PROTECTION, "1; mode=block")).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.X_XSS_PROTECTION); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class XssProtectionInLambdaConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -325,21 +582,12 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			http 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				.headers(headers -> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					headers 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						.defaultsDisabled() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						.xssProtection(withDefaults()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// @formatter:on 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenFrameOptionsSameOriginConfiguredThenFrameOptionsHeaderHasValueSameOrigin() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(HeadersCustomSameOriginConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						.defaultsDisabled() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						.xssProtection(withDefaults()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// @formatter:on 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andExpect(header().string(HttpHeaders.X_FRAME_OPTIONS, XFrameOptionsMode.SAMEORIGIN.name())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -356,16 +604,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenFrameOptionsSameOriginConfiguredInLambdaThenFrameOptionsHeaderHasValueSameOrigin() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(HeadersCustomSameOriginInLambdaConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andExpect(header().string(HttpHeaders.X_FRAME_OPTIONS, XFrameOptionsMode.SAMEORIGIN.name())) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class HeadersCustomSameOriginInLambdaConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -382,14 +620,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenHeaderDefaultsDisabledAndPublicHpkpWithNoPinThenNoHeadersInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(HpkpConfigNoPins.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/")).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).isEmpty(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class HpkpConfigNoPins extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -405,25 +635,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenSecureRequestAndHpkpWithPinThenPublicKeyPinsReportOnlyHeaderInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(HpkpConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andExpect(header().string(HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						"max-age=5184000 ; pin-sha256=\"d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=\"")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenInsecureRequestHeaderDefaultsDisabledAndHpkpWithPinThenNoHeadersInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(HpkpConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/")).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).isEmpty(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class HpkpConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -440,18 +651,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenHpkpWithMultiplePinsThenPublicKeyPinsReportOnlyHeaderWithMultiplePinsInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(HpkpConfigWithPins.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)).andExpect(header().string( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				"max-age=5184000 ; pin-sha256=\"d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=\" ; pin-sha256=\"E9CZ9INDbd+2eRQozYqqbQ2yXLVKB9+xcprMF+44U1g=\"")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class HpkpConfigWithPins extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -472,17 +671,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenHpkpWithCustomAgeThenPublicKeyPinsReportOnlyHeaderWithCustomAgeInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(HpkpConfigCustomAge.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andExpect(header().string(HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						"max-age=604800 ; pin-sha256=\"d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=\"")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class HpkpConfigCustomAge extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -500,17 +688,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenHpkpWithReportOnlyFalseThenPublicKeyPinsHeaderInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(HpkpConfigTerminateConnection.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andExpect(header().string(HttpHeaders.PUBLIC_KEY_PINS, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						"max-age=5184000 ; pin-sha256=\"d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=\"")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.PUBLIC_KEY_PINS); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class HpkpConfigTerminateConnection extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -528,18 +705,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenHpkpIncludeSubdomainThenPublicKeyPinsReportOnlyHeaderWithIncludeSubDomainsInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(HpkpConfigIncludeSubDomains.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)).andExpect(header().string( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				"max-age=5184000 ; pin-sha256=\"d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=\" ; includeSubDomains")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class HpkpConfigIncludeSubDomains extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -557,17 +722,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenHpkpWithReportUriThenPublicKeyPinsReportOnlyHeaderWithReportUriInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(HpkpConfigWithReportURI.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)).andExpect(header().string( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				"max-age=5184000 ; pin-sha256=\"d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=\" ; report-uri=\"https://example.net/pkp-report\"")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class HpkpConfigWithReportURI extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -585,18 +739,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenHpkpWithReportUriAsStringThenPublicKeyPinsReportOnlyHeaderWithReportUriInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(HpkpConfigWithReportURIAsString.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)).andExpect(header().string( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				"max-age=5184000 ; pin-sha256=\"d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=\" ; report-uri=\"https://example.net/pkp-report\"")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class HpkpConfigWithReportURIAsString extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -614,18 +756,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenHpkpWithReportUriInLambdaThenPublicKeyPinsReportOnlyHeaderWithReportUriInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(HpkpWithReportUriInLambdaConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)).andExpect(header().string( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				"max-age=5184000 ; pin-sha256=\"d6qzRu9zOECb90Uez27xWltNsj0e1Md7GkYYkVoZWmM=\" ; report-uri=\"https://example.net/pkp-report\"")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.PUBLIC_KEY_PINS_REPORT_ONLY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class HpkpWithReportUriInLambdaConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -647,15 +777,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenContentSecurityPolicyConfiguredThenContentSecurityPolicyHeaderInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(ContentSecurityPolicyDefaultConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andExpect(header().string(HttpHeaders.CONTENT_SECURITY_POLICY, "default-src 'self'")).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.CONTENT_SECURITY_POLICY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class ContentSecurityPolicyDefaultConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -671,19 +792,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenContentSecurityPolicyWithReportOnlyThenContentSecurityPolicyReportOnlyHeaderInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(ContentSecurityPolicyReportOnlyConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andExpect(header().string(HttpHeaders.CONTENT_SECURITY_POLICY_REPORT_ONLY, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						"default-src 'self'; script-src trustedscripts.example.com")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.containsExactly(HttpHeaders.CONTENT_SECURITY_POLICY_REPORT_ONLY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class ContentSecurityPolicyReportOnlyConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -700,19 +808,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenContentSecurityPolicyWithReportOnlyInLambdaThenContentSecurityPolicyReportOnlyHeaderInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(ContentSecurityPolicyReportOnlyInLambdaConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andExpect(header().string(HttpHeaders.CONTENT_SECURITY_POLICY_REPORT_ONLY, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						"default-src 'self'; script-src trustedscripts.example.com")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.containsExactly(HttpHeaders.CONTENT_SECURITY_POLICY_REPORT_ONLY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class ContentSecurityPolicyReportOnlyInLambdaConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -734,12 +829,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void configureWhenContentSecurityPolicyEmptyThenException() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThatThrownBy(() -> this.spring.register(ContentSecurityPolicyInvalidConfig.class).autowire()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.isInstanceOf(BeanCreationException.class).hasRootCauseInstanceOf(IllegalArgumentException.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class ContentSecurityPolicyInvalidConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -755,12 +844,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void configureWhenContentSecurityPolicyEmptyInLambdaThenException() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThatThrownBy(() -> this.spring.register(ContentSecurityPolicyInvalidInLambdaConfig.class).autowire()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.isInstanceOf(BeanCreationException.class).hasRootCauseInstanceOf(IllegalArgumentException.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class ContentSecurityPolicyInvalidInLambdaConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -780,15 +863,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void configureWhenContentSecurityPolicyNoPolicyDirectivesInLambdaThenDefaultHeaderValue() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(ContentSecurityPolicyNoDirectivesInLambdaConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andExpect(header().string(HttpHeaders.CONTENT_SECURITY_POLICY, "default-src 'self'")).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.CONTENT_SECURITY_POLICY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class ContentSecurityPolicyNoDirectivesInLambdaConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -806,15 +880,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenReferrerPolicyConfiguredThenReferrerPolicyHeaderInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(ReferrerPolicyDefaultConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andExpect(header().string("Referrer-Policy", ReferrerPolicy.NO_REFERRER.getPolicy())).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly("Referrer-Policy"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class ReferrerPolicyDefaultConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -830,15 +895,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenReferrerPolicyInLambdaThenReferrerPolicyHeaderInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(ReferrerPolicyDefaultInLambdaConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andExpect(header().string("Referrer-Policy", ReferrerPolicy.NO_REFERRER.getPolicy())).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly("Referrer-Policy"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class ReferrerPolicyDefaultInLambdaConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -856,16 +912,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenReferrerPolicyConfiguredWithCustomValueThenReferrerPolicyHeaderWithCustomValueInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(ReferrerPolicyCustomConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andExpect(header().string("Referrer-Policy", ReferrerPolicy.SAME_ORIGIN.getPolicy())).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly("Referrer-Policy"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class ReferrerPolicyCustomConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -881,15 +927,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenReferrerPolicyConfiguredWithCustomValueInLambdaThenCustomValueInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(ReferrerPolicyCustomInLambdaConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andExpect(header().string("Referrer-Policy", ReferrerPolicy.SAME_ORIGIN.getPolicy())).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly("Referrer-Policy"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class ReferrerPolicyCustomInLambdaConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -909,15 +946,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenFeaturePolicyConfiguredThenFeaturePolicyHeaderInResponse() throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(FeaturePolicyConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andExpect(header().string("Feature-Policy", "geolocation 'self'")).andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly("Feature-Policy"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class FeaturePolicyConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -933,12 +961,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void configureWhenFeaturePolicyEmptyThenException() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThatThrownBy(() -> this.spring.register(FeaturePolicyInvalidConfig.class).autowire()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.isInstanceOf(BeanCreationException.class).hasRootCauseInstanceOf(IllegalArgumentException.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class FeaturePolicyInvalidConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -954,17 +976,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenHstsConfiguredWithPreloadThenStrictTransportSecurityHeaderWithPreloadInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(HstsWithPreloadConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)).andExpect(header() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.string(HttpHeaders.STRICT_TRANSPORT_SECURITY, "max-age=31536000 ; includeSubDomains ; preload")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.STRICT_TRANSPORT_SECURITY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class HstsWithPreloadConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -981,17 +992,6 @@ public class HeadersConfigurerTests { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	@Test 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	public void getWhenHstsConfiguredWithPreloadInLambdaThenStrictTransportSecurityHeaderWithPreloadInResponse() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.spring.register(HstsWithPreloadInLambdaConfig.class).autowire(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		MvcResult mvcResult = this.mvc.perform(get("/").secure(true)).andExpect(header() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.string(HttpHeaders.STRICT_TRANSPORT_SECURITY, "max-age=31536000 ; includeSubDomains ; preload")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				.andReturn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		assertThat(mvcResult.getResponse().getHeaderNames()).containsExactly(HttpHeaders.STRICT_TRANSPORT_SECURITY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	@EnableWebSecurity 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	static class HstsWithPreloadInLambdaConfig extends WebSecurityConfigurerAdapter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |