1
0
mirror of synced 2026-08-05 09:47:05 +00:00

Add reactive support for Referrer-Policy security header

This commit is contained in:
Vedran Pavic
2018-08-20 11:46:39 +02:00
committed by Rob Winch
parent 10621a0f2c
commit f382b69507
4 changed files with 242 additions and 1 deletions
@@ -102,6 +102,8 @@ import org.springframework.security.web.server.header.ContentSecurityPolicyServe
import org.springframework.security.web.server.header.ContentTypeOptionsServerHttpHeadersWriter;
import org.springframework.security.web.server.header.FeaturePolicyServerHttpHeadersWriter;
import org.springframework.security.web.server.header.HttpHeaderWriterWebFilter;
import org.springframework.security.web.server.header.ReferrerPolicyServerHttpHeadersWriter;
import org.springframework.security.web.server.header.ReferrerPolicyServerHttpHeadersWriter.ReferrerPolicy;
import org.springframework.security.web.server.header.ServerHttpHeadersWriter;
import org.springframework.security.web.server.header.StrictTransportSecurityServerHttpHeadersWriter;
import org.springframework.security.web.server.header.XFrameOptionsServerHttpHeadersWriter;
@@ -1667,6 +1669,8 @@ public class ServerHttpSecurity {
private ContentSecurityPolicyServerHttpHeadersWriter contentSecurityPolicy = new ContentSecurityPolicyServerHttpHeadersWriter();
private ReferrerPolicyServerHttpHeadersWriter referrerPolicy = new ReferrerPolicyServerHttpHeadersWriter();
/**
* Allows method chaining to continue configuring the {@link ServerHttpSecurity}
* @return the {@link ServerHttpSecurity} to continue configuring
@@ -1748,6 +1752,14 @@ public class ServerHttpSecurity {
return new FeaturePolicySpec(policyDirectives);
}
/**
* Configures {@code Referrer-Policy} response header.
* @return the {@link ReferrerPolicySpec} to configure
*/
public ReferrerPolicySpec referrerPolicy() {
return new ReferrerPolicySpec();
}
/**
* Configures cache control headers
* @see #cache()
@@ -1937,10 +1949,44 @@ public class ServerHttpSecurity {
}
/**
* Configures {@code Referrer-Policy} response header.
*
* @see #referrerPolicy()
* @since 5.1
*/
public class ReferrerPolicySpec {
/**
* Set the policy to be used in the response header. Defaults to the
* {@link ReferrerPolicy#NO_REFERRER} header.
* @param referrerPolicy the policy
* @return the {@link HeaderSpec} to continue configuring
*/
public HeaderSpec referrerPolicy(ReferrerPolicy referrerPolicy) {
HeaderSpec.this.referrerPolicy.setPolicy(referrerPolicy);
return HeaderSpec.this;
}
/**
* Allows method chaining to continue configuring the
* {@link ServerHttpSecurity}.
* @return the {@link HeaderSpec} to continue configuring
*/
public HeaderSpec and() {
return HeaderSpec.this;
}
private ReferrerPolicySpec() {
}
}
private HeaderSpec() {
this.writers = new ArrayList<>(
Arrays.asList(this.cacheControl, this.contentTypeOptions, this.hsts,
this.frameOptions, this.xss, this.featurePolicy, this.contentSecurityPolicy));
this.frameOptions, this.xss, this.featurePolicy, this.contentSecurityPolicy,
this.referrerPolicy));
}
}
@@ -30,6 +30,8 @@ import org.springframework.security.test.web.reactive.server.WebTestClientBuilde
import org.springframework.security.web.server.header.ContentSecurityPolicyServerHttpHeadersWriter;
import org.springframework.security.web.server.header.ContentTypeOptionsServerHttpHeadersWriter;
import org.springframework.security.web.server.header.FeaturePolicyServerHttpHeadersWriter;
import org.springframework.security.web.server.header.ReferrerPolicyServerHttpHeadersWriter;
import org.springframework.security.web.server.header.ReferrerPolicyServerHttpHeadersWriter.ReferrerPolicy;
import org.springframework.security.web.server.header.StrictTransportSecurityServerHttpHeadersWriter;
import org.springframework.security.web.server.header.XFrameOptionsServerHttpHeadersWriter;
import org.springframework.security.web.server.header.XXssProtectionServerHttpHeadersWriter;
@@ -171,6 +173,15 @@ public class HeaderSpecTests {
assertHeaders();
}
@Test
public void headersWhenReferrerPolicyEnabledThenFeaturePolicyWritten() {
this.expectedHeaders.add(ReferrerPolicyServerHttpHeadersWriter.REFERRER_POLICY,
ReferrerPolicy.NO_REFERRER.getPolicy());
this.headers.referrerPolicy();
assertHeaders();
}
private void expectHeaderNamesNotPresent(String... headerNames) {
for(String headerName : headerNames) {
this.expectedHeaders.remove(headerName);