|  | @@ -1,5 +1,5 @@
 | 
	
		
			
				|  |  |  /*
 | 
	
		
			
				|  |  | - * Copyright 2002-2019 the original author or authors.
 | 
	
		
			
				|  |  | + * Copyright 2002-2021 the original author or authors.
 | 
	
		
			
				|  |  |   *
 | 
	
		
			
				|  |  |   * Licensed under the Apache License, Version 2.0 (the "License");
 | 
	
		
			
				|  |  |   * you may not use this file except in compliance with the License.
 | 
	
	
		
			
				|  | @@ -31,6 +31,9 @@ import org.springframework.security.web.header.HeaderWriter;
 | 
	
		
			
				|  |  |  import org.springframework.security.web.header.HeaderWriterFilter;
 | 
	
		
			
				|  |  |  import org.springframework.security.web.header.writers.CacheControlHeadersWriter;
 | 
	
		
			
				|  |  |  import org.springframework.security.web.header.writers.ContentSecurityPolicyHeaderWriter;
 | 
	
		
			
				|  |  | +import org.springframework.security.web.header.writers.CrossOriginEmbedderPolicyHeaderWriter;
 | 
	
		
			
				|  |  | +import org.springframework.security.web.header.writers.CrossOriginOpenerPolicyHeaderWriter;
 | 
	
		
			
				|  |  | +import org.springframework.security.web.header.writers.CrossOriginResourcePolicyHeaderWriter;
 | 
	
		
			
				|  |  |  import org.springframework.security.web.header.writers.FeaturePolicyHeaderWriter;
 | 
	
		
			
				|  |  |  import org.springframework.security.web.header.writers.HpkpHeaderWriter;
 | 
	
		
			
				|  |  |  import org.springframework.security.web.header.writers.HstsHeaderWriter;
 | 
	
	
		
			
				|  | @@ -97,6 +100,12 @@ public class HeadersConfigurer<H extends HttpSecurityBuilder<H>>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	private final PermissionsPolicyConfig permissionsPolicy = new PermissionsPolicyConfig();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	private final CrossOriginOpenerPolicyConfig crossOriginOpenerPolicy = new CrossOriginOpenerPolicyConfig();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	private final CrossOriginEmbedderPolicyConfig crossOriginEmbedderPolicy = new CrossOriginEmbedderPolicyConfig();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	private final CrossOriginResourcePolicyConfig crossOriginResourcePolicy = new CrossOriginResourcePolicyConfig();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	/**
 | 
	
		
			
				|  |  |  	 * Creates a new instance
 | 
	
		
			
				|  |  |  	 *
 | 
	
	
		
			
				|  | @@ -392,6 +401,9 @@ public class HeadersConfigurer<H extends HttpSecurityBuilder<H>>
 | 
	
		
			
				|  |  |  		addIfNotNull(writers, this.referrerPolicy.writer);
 | 
	
		
			
				|  |  |  		addIfNotNull(writers, this.featurePolicy.writer);
 | 
	
		
			
				|  |  |  		addIfNotNull(writers, this.permissionsPolicy.writer);
 | 
	
		
			
				|  |  | +		addIfNotNull(writers, this.crossOriginOpenerPolicy.writer);
 | 
	
		
			
				|  |  | +		addIfNotNull(writers, this.crossOriginEmbedderPolicy.writer);
 | 
	
		
			
				|  |  | +		addIfNotNull(writers, this.crossOriginResourcePolicy.writer);
 | 
	
		
			
				|  |  |  		writers.addAll(this.headerWriters);
 | 
	
		
			
				|  |  |  		return writers;
 | 
	
		
			
				|  |  |  	}
 | 
	
	
		
			
				|  | @@ -544,6 +556,129 @@ public class HeadersConfigurer<H extends HttpSecurityBuilder<H>>
 | 
	
		
			
				|  |  |  		return this.permissionsPolicy;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * Allows configuration for <a href=
 | 
	
		
			
				|  |  | +	 * "https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Opener-Policy">
 | 
	
		
			
				|  |  | +	 * Cross-Origin-Opener-Policy</a> header.
 | 
	
		
			
				|  |  | +	 * <p>
 | 
	
		
			
				|  |  | +	 * Configuration is provided to the {@link CrossOriginOpenerPolicyHeaderWriter} which
 | 
	
		
			
				|  |  | +	 * responsible for writing the header.
 | 
	
		
			
				|  |  | +	 * </p>
 | 
	
		
			
				|  |  | +	 * @return the {@link CrossOriginOpenerPolicyConfig} for additional confniguration
 | 
	
		
			
				|  |  | +	 * @since 5.7
 | 
	
		
			
				|  |  | +	 * @see CrossOriginOpenerPolicyHeaderWriter
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	public CrossOriginOpenerPolicyConfig crossOriginOpenerPolicy() {
 | 
	
		
			
				|  |  | +		this.crossOriginOpenerPolicy.writer = new CrossOriginOpenerPolicyHeaderWriter();
 | 
	
		
			
				|  |  | +		return this.crossOriginOpenerPolicy;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * Allows configuration for <a href=
 | 
	
		
			
				|  |  | +	 * "https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Opener-Policy">
 | 
	
		
			
				|  |  | +	 * Cross-Origin-Opener-Policy</a> header.
 | 
	
		
			
				|  |  | +	 * <p>
 | 
	
		
			
				|  |  | +	 * Calling this method automatically enables (includes) the
 | 
	
		
			
				|  |  | +	 * {@code Cross-Origin-Opener-Policy} header in the response using the supplied
 | 
	
		
			
				|  |  | +	 * policy.
 | 
	
		
			
				|  |  | +	 * <p>
 | 
	
		
			
				|  |  | +	 * <p>
 | 
	
		
			
				|  |  | +	 * Configuration is provided to the {@link CrossOriginOpenerPolicyHeaderWriter} which
 | 
	
		
			
				|  |  | +	 * responsible for writing the header.
 | 
	
		
			
				|  |  | +	 * </p>
 | 
	
		
			
				|  |  | +	 * @return the {@link HeadersConfigurer} for additional customizations
 | 
	
		
			
				|  |  | +	 * @since 5.7
 | 
	
		
			
				|  |  | +	 * @see CrossOriginOpenerPolicyHeaderWriter
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	public HeadersConfigurer<H> crossOriginOpenerPolicy(
 | 
	
		
			
				|  |  | +			Customizer<CrossOriginOpenerPolicyConfig> crossOriginOpenerPolicyCustomizer) {
 | 
	
		
			
				|  |  | +		this.crossOriginOpenerPolicy.writer = new CrossOriginOpenerPolicyHeaderWriter();
 | 
	
		
			
				|  |  | +		crossOriginOpenerPolicyCustomizer.customize(this.crossOriginOpenerPolicy);
 | 
	
		
			
				|  |  | +		return HeadersConfigurer.this;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * Allows configuration for <a href=
 | 
	
		
			
				|  |  | +	 * "https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Embedder-Policy">
 | 
	
		
			
				|  |  | +	 * Cross-Origin-Embedder-Policy</a> header.
 | 
	
		
			
				|  |  | +	 * <p>
 | 
	
		
			
				|  |  | +	 * Configuration is provided to the {@link CrossOriginEmbedderPolicyHeaderWriter}
 | 
	
		
			
				|  |  | +	 * which is responsible for writing the header.
 | 
	
		
			
				|  |  | +	 * </p>
 | 
	
		
			
				|  |  | +	 * @return the {@link CrossOriginEmbedderPolicyConfig} for additional customizations
 | 
	
		
			
				|  |  | +	 * @since 5.7
 | 
	
		
			
				|  |  | +	 * @see CrossOriginEmbedderPolicyHeaderWriter
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	public CrossOriginEmbedderPolicyConfig crossOriginEmbedderPolicy() {
 | 
	
		
			
				|  |  | +		this.crossOriginEmbedderPolicy.writer = new CrossOriginEmbedderPolicyHeaderWriter();
 | 
	
		
			
				|  |  | +		return this.crossOriginEmbedderPolicy;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * Allows configuration for <a href=
 | 
	
		
			
				|  |  | +	 * "https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Embedder-Policy">
 | 
	
		
			
				|  |  | +	 * Cross-Origin-Embedder-Policy</a> header.
 | 
	
		
			
				|  |  | +	 * <p>
 | 
	
		
			
				|  |  | +	 * Calling this method automatically enables (includes) the
 | 
	
		
			
				|  |  | +	 * {@code Cross-Origin-Embedder-Policy} header in the response using the supplied
 | 
	
		
			
				|  |  | +	 * policy.
 | 
	
		
			
				|  |  | +	 * <p>
 | 
	
		
			
				|  |  | +	 * <p>
 | 
	
		
			
				|  |  | +	 * Configuration is provided to the {@link CrossOriginEmbedderPolicyHeaderWriter}
 | 
	
		
			
				|  |  | +	 * which is responsible for writing the header.
 | 
	
		
			
				|  |  | +	 * </p>
 | 
	
		
			
				|  |  | +	 * @return the {@link HeadersConfigurer} for additional customizations
 | 
	
		
			
				|  |  | +	 * @since 5.7
 | 
	
		
			
				|  |  | +	 * @see CrossOriginEmbedderPolicyHeaderWriter
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	public HeadersConfigurer<H> crossOriginEmbedderPolicy(
 | 
	
		
			
				|  |  | +			Customizer<CrossOriginEmbedderPolicyConfig> crossOriginEmbedderPolicyCustomizer) {
 | 
	
		
			
				|  |  | +		this.crossOriginEmbedderPolicy.writer = new CrossOriginEmbedderPolicyHeaderWriter();
 | 
	
		
			
				|  |  | +		crossOriginEmbedderPolicyCustomizer.customize(this.crossOriginEmbedderPolicy);
 | 
	
		
			
				|  |  | +		return HeadersConfigurer.this;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * Allows configuration for <a href=
 | 
	
		
			
				|  |  | +	 * "https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Resource-Policy">
 | 
	
		
			
				|  |  | +	 * Cross-Origin-Resource-Policy</a> header.
 | 
	
		
			
				|  |  | +	 * <p>
 | 
	
		
			
				|  |  | +	 * Configuration is provided to the {@link CrossOriginResourcePolicyHeaderWriter}
 | 
	
		
			
				|  |  | +	 * which is responsible for writing the header:
 | 
	
		
			
				|  |  | +	 * </p>
 | 
	
		
			
				|  |  | +	 * @return the {@link HeadersConfigurer} for additional customizations
 | 
	
		
			
				|  |  | +	 * @since 5.7
 | 
	
		
			
				|  |  | +	 * @see CrossOriginResourcePolicyHeaderWriter
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	public CrossOriginResourcePolicyConfig crossOriginResourcePolicy() {
 | 
	
		
			
				|  |  | +		this.crossOriginResourcePolicy.writer = new CrossOriginResourcePolicyHeaderWriter();
 | 
	
		
			
				|  |  | +		return this.crossOriginResourcePolicy;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/**
 | 
	
		
			
				|  |  | +	 * Allows configuration for <a href=
 | 
	
		
			
				|  |  | +	 * "https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Resource-Policy">
 | 
	
		
			
				|  |  | +	 * Cross-Origin-Resource-Policy</a> header.
 | 
	
		
			
				|  |  | +	 * <p>
 | 
	
		
			
				|  |  | +	 * Calling this method automatically enables (includes) the
 | 
	
		
			
				|  |  | +	 * {@code Cross-Origin-Resource-Policy} header in the response using the supplied
 | 
	
		
			
				|  |  | +	 * policy.
 | 
	
		
			
				|  |  | +	 * <p>
 | 
	
		
			
				|  |  | +	 * <p>
 | 
	
		
			
				|  |  | +	 * Configuration is provided to the {@link CrossOriginResourcePolicyHeaderWriter}
 | 
	
		
			
				|  |  | +	 * which is responsible for writing the header:
 | 
	
		
			
				|  |  | +	 * </p>
 | 
	
		
			
				|  |  | +	 * @return the {@link HeadersConfigurer} for additional customizations
 | 
	
		
			
				|  |  | +	 * @since 5.7
 | 
	
		
			
				|  |  | +	 * @see CrossOriginResourcePolicyHeaderWriter
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	public HeadersConfigurer<H> crossOriginResourcePolicy(
 | 
	
		
			
				|  |  | +			Customizer<CrossOriginResourcePolicyConfig> crossOriginResourcePolicyCustomizer) {
 | 
	
		
			
				|  |  | +		this.crossOriginResourcePolicy.writer = new CrossOriginResourcePolicyHeaderWriter();
 | 
	
		
			
				|  |  | +		crossOriginResourcePolicyCustomizer.customize(this.crossOriginResourcePolicy);
 | 
	
		
			
				|  |  | +		return HeadersConfigurer.this;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	public final class ContentTypeOptionsConfig {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		private XContentTypeOptionsHeaderWriter writer;
 | 
	
	
		
			
				|  | @@ -1142,4 +1277,96 @@ public class HeadersConfigurer<H extends HttpSecurityBuilder<H>>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	public final class CrossOriginOpenerPolicyConfig {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		private CrossOriginOpenerPolicyHeaderWriter writer;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		public CrossOriginOpenerPolicyConfig() {
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		/**
 | 
	
		
			
				|  |  | +		 * Sets the policy to be used in the {@code Cross-Origin-Opener-Policy} header
 | 
	
		
			
				|  |  | +		 * @param openerPolicy a {@code Cross-Origin-Opener-Policy}
 | 
	
		
			
				|  |  | +		 * @return the {@link CrossOriginOpenerPolicyConfig} for additional configuration
 | 
	
		
			
				|  |  | +		 * @throws IllegalArgumentException if openerPolicy is null
 | 
	
		
			
				|  |  | +		 */
 | 
	
		
			
				|  |  | +		public CrossOriginOpenerPolicyConfig policy(
 | 
	
		
			
				|  |  | +				CrossOriginOpenerPolicyHeaderWriter.CrossOriginOpenerPolicy openerPolicy) {
 | 
	
		
			
				|  |  | +			this.writer.setPolicy(openerPolicy);
 | 
	
		
			
				|  |  | +			return this;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		/**
 | 
	
		
			
				|  |  | +		 * Allows completing configuration of Cross Origin Opener Policy and continuing
 | 
	
		
			
				|  |  | +		 * configuration of headers.
 | 
	
		
			
				|  |  | +		 * @return the {@link HeadersConfigurer} for additional configuration
 | 
	
		
			
				|  |  | +		 */
 | 
	
		
			
				|  |  | +		public HeadersConfigurer<H> and() {
 | 
	
		
			
				|  |  | +			return HeadersConfigurer.this;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	public final class CrossOriginEmbedderPolicyConfig {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		private CrossOriginEmbedderPolicyHeaderWriter writer;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		public CrossOriginEmbedderPolicyConfig() {
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		/**
 | 
	
		
			
				|  |  | +		 * Sets the policy to be used in the {@code Cross-Origin-Embedder-Policy} header
 | 
	
		
			
				|  |  | +		 * @param embedderPolicy a {@code Cross-Origin-Embedder-Policy}
 | 
	
		
			
				|  |  | +		 * @return the {@link CrossOriginEmbedderPolicyConfig} for additional
 | 
	
		
			
				|  |  | +		 * configuration
 | 
	
		
			
				|  |  | +		 * @throws IllegalArgumentException if embedderPolicy is null
 | 
	
		
			
				|  |  | +		 */
 | 
	
		
			
				|  |  | +		public CrossOriginEmbedderPolicyConfig policy(
 | 
	
		
			
				|  |  | +				CrossOriginEmbedderPolicyHeaderWriter.CrossOriginEmbedderPolicy embedderPolicy) {
 | 
	
		
			
				|  |  | +			this.writer.setPolicy(embedderPolicy);
 | 
	
		
			
				|  |  | +			return this;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		/**
 | 
	
		
			
				|  |  | +		 * Allows completing configuration of Cross-Origin-Embedder-Policy and continuing
 | 
	
		
			
				|  |  | +		 * configuration of headers.
 | 
	
		
			
				|  |  | +		 * @return the {@link HeadersConfigurer} for additional configuration
 | 
	
		
			
				|  |  | +		 */
 | 
	
		
			
				|  |  | +		public HeadersConfigurer<H> and() {
 | 
	
		
			
				|  |  | +			return HeadersConfigurer.this;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	public final class CrossOriginResourcePolicyConfig {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		private CrossOriginResourcePolicyHeaderWriter writer;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		public CrossOriginResourcePolicyConfig() {
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		/**
 | 
	
		
			
				|  |  | +		 * Sets the policy to be used in the {@code Cross-Origin-Resource-Policy} header
 | 
	
		
			
				|  |  | +		 * @param resourcePolicy a {@code Cross-Origin-Resource-Policy}
 | 
	
		
			
				|  |  | +		 * @return the {@link CrossOriginResourcePolicyConfig} for additional
 | 
	
		
			
				|  |  | +		 * configuration
 | 
	
		
			
				|  |  | +		 * @throws IllegalArgumentException if resourcePolicy is null
 | 
	
		
			
				|  |  | +		 */
 | 
	
		
			
				|  |  | +		public CrossOriginResourcePolicyConfig policy(
 | 
	
		
			
				|  |  | +				CrossOriginResourcePolicyHeaderWriter.CrossOriginResourcePolicy resourcePolicy) {
 | 
	
		
			
				|  |  | +			this.writer.setPolicy(resourcePolicy);
 | 
	
		
			
				|  |  | +			return this;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		/**
 | 
	
		
			
				|  |  | +		 * Allows completing configuration of Cross-Origin-Resource-Policy and continuing
 | 
	
		
			
				|  |  | +		 * configuration of headers.
 | 
	
		
			
				|  |  | +		 * @return the {@link HeadersConfigurer} for additional configuration
 | 
	
		
			
				|  |  | +		 */
 | 
	
		
			
				|  |  | +		public HeadersConfigurer<H> and() {
 | 
	
		
			
				|  |  | +			return HeadersConfigurer.this;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  }
 |