Custom ServerHttpHeadersWriter to HeaderSpec
Add the ability to have a custom ServerHttpHeadersWriter to HeaderSpec Fixes gh-7636
This commit is contained in:
parent
bb72206eef
commit
480c5bc87e
|
@ -3284,6 +3284,20 @@ public class ServerHttpSecurity {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configures custom headers writer
|
||||||
|
*
|
||||||
|
* @param serverHttpHeadersWriter the {@link ServerHttpHeadersWriter} to provide custom headers writer
|
||||||
|
* @return the {@link HeaderSpec} to customize
|
||||||
|
* @since 5.3.0
|
||||||
|
* @author Ankur Pathak
|
||||||
|
*/
|
||||||
|
public HeaderSpec writer(ServerHttpHeadersWriter serverHttpHeadersWriter) {
|
||||||
|
Assert.notNull(serverHttpHeadersWriter, () -> "serverHttpHeadersWriter cannot be null");
|
||||||
|
this.writers.add(serverHttpHeadersWriter);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configures the Strict Transport Security response headers
|
* Configures the Strict Transport Security response headers
|
||||||
* @return the {@link HstsSpec} to configure
|
* @return the {@link HstsSpec} to configure
|
||||||
|
|
|
@ -24,6 +24,7 @@ import java.util.Set;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.HttpHeaders;
|
||||||
import org.springframework.security.test.web.reactive.server.WebTestClientBuilder;
|
import org.springframework.security.test.web.reactive.server.WebTestClientBuilder;
|
||||||
|
@ -46,9 +47,12 @@ import static org.springframework.security.config.Customizer.withDefaults;
|
||||||
*
|
*
|
||||||
* @author Rob Winch
|
* @author Rob Winch
|
||||||
* @author Vedran Pavic
|
* @author Vedran Pavic
|
||||||
|
* @author Ankur Pathak
|
||||||
* @since 5.0
|
* @since 5.0
|
||||||
*/
|
*/
|
||||||
public class HeaderSpecTests {
|
public class HeaderSpecTests {
|
||||||
|
private final static String CUSTOM_HEADER = "CUSTOM-HEADER";
|
||||||
|
private final static String CUSTOM_VALUE = "CUSTOM-VALUE";
|
||||||
|
|
||||||
private ServerHttpSecurity http = ServerHttpSecurity.http();
|
private ServerHttpSecurity http = ServerHttpSecurity.http();
|
||||||
|
|
||||||
|
@ -387,6 +391,20 @@ public class HeaderSpecTests {
|
||||||
assertHeaders();
|
assertHeaders();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void headersWhenCustomHeadersWriter() {
|
||||||
|
this.expectedHeaders.add(CUSTOM_HEADER, CUSTOM_VALUE);
|
||||||
|
this.http.headers(headers -> headers.writer(exchange -> {
|
||||||
|
return Mono.just(exchange)
|
||||||
|
.doOnNext(it -> {
|
||||||
|
it.getResponse().getHeaders().add(CUSTOM_HEADER, CUSTOM_VALUE);
|
||||||
|
}).then();
|
||||||
|
|
||||||
|
}));
|
||||||
|
|
||||||
|
assertHeaders();
|
||||||
|
}
|
||||||
|
|
||||||
private void expectHeaderNamesNotPresent(String... headerNames) {
|
private void expectHeaderNamesNotPresent(String... headerNames) {
|
||||||
for (String headerName : headerNames) {
|
for (String headerName : headerNames) {
|
||||||
this.expectedHeaders.remove(headerName);
|
this.expectedHeaders.remove(headerName);
|
||||||
|
|
Loading…
Reference in New Issue