mirror of
https://github.com/spring-projects/spring-security.git
synced 2025-06-27 06:12:27 +00:00
SecurityContextRepository->SecurityContextServerRepository
Issue gh-4615
This commit is contained in:
parent
57d26ffa10
commit
bfcc2a602d
@ -44,10 +44,10 @@ import org.springframework.security.web.server.authorization.AuthorizationWebFil
|
|||||||
import org.springframework.security.web.server.authorization.DelegatingReactiveAuthorizationManager;
|
import org.springframework.security.web.server.authorization.DelegatingReactiveAuthorizationManager;
|
||||||
import org.springframework.security.web.server.authorization.ExceptionTranslationWebFilter;
|
import org.springframework.security.web.server.authorization.ExceptionTranslationWebFilter;
|
||||||
import org.springframework.security.web.server.context.AuthenticationReactorContextFilter;
|
import org.springframework.security.web.server.context.AuthenticationReactorContextFilter;
|
||||||
import org.springframework.security.web.server.context.SecurityContextRepository;
|
import org.springframework.security.web.server.context.SecurityContextServerRepository;
|
||||||
import org.springframework.security.web.server.context.SecurityContextRepositoryWebFilter;
|
import org.springframework.security.web.server.context.SecurityContextRepositoryWebFilter;
|
||||||
import org.springframework.security.web.server.context.ServerWebExchangeAttributeSecurityContextRepository;
|
import org.springframework.security.web.server.context.ServerWebExchangeAttributeSecurityContextServerRepository;
|
||||||
import org.springframework.security.web.server.context.WebSessionSecurityContextRepository;
|
import org.springframework.security.web.server.context.WebSessionSecurityContextServerRepository;
|
||||||
import org.springframework.security.web.server.header.CacheControlHttpHeadersWriter;
|
import org.springframework.security.web.server.header.CacheControlHttpHeadersWriter;
|
||||||
import org.springframework.security.web.server.header.CompositeHttpHeadersWriter;
|
import org.springframework.security.web.server.header.CompositeHttpHeadersWriter;
|
||||||
import org.springframework.security.web.server.header.ContentTypeOptionsHttpHeadersWriter;
|
import org.springframework.security.web.server.header.ContentTypeOptionsHttpHeadersWriter;
|
||||||
@ -94,7 +94,7 @@ public class HttpSecurity {
|
|||||||
|
|
||||||
private ReactiveAuthenticationManager authenticationManager;
|
private ReactiveAuthenticationManager authenticationManager;
|
||||||
|
|
||||||
private SecurityContextRepository securityContextRepository;
|
private SecurityContextServerRepository securityContextServerRepository;
|
||||||
|
|
||||||
private ServerAuthenticationEntryPoint serverAuthenticationEntryPoint;
|
private ServerAuthenticationEntryPoint serverAuthenticationEntryPoint;
|
||||||
|
|
||||||
@ -127,9 +127,9 @@ public class HttpSecurity {
|
|||||||
return this.securityMatcher;
|
return this.securityMatcher;
|
||||||
}
|
}
|
||||||
|
|
||||||
public HttpSecurity securityContextRepository(SecurityContextRepository securityContextRepository) {
|
public HttpSecurity securityContextRepository(SecurityContextServerRepository securityContextServerRepository) {
|
||||||
Assert.notNull(securityContextRepository, "securityContextRepository cannot be null");
|
Assert.notNull(securityContextServerRepository, "securityContextRepository cannot be null");
|
||||||
this.securityContextRepository = securityContextRepository;
|
this.securityContextServerRepository = securityContextServerRepository;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,15 +183,15 @@ public class HttpSecurity {
|
|||||||
}
|
}
|
||||||
if(this.httpBasic != null) {
|
if(this.httpBasic != null) {
|
||||||
this.httpBasic.authenticationManager(this.authenticationManager);
|
this.httpBasic.authenticationManager(this.authenticationManager);
|
||||||
if(this.securityContextRepository != null) {
|
if(this.securityContextServerRepository != null) {
|
||||||
this.httpBasic.securityContextRepository(this.securityContextRepository);
|
this.httpBasic.securityContextRepository(this.securityContextServerRepository);
|
||||||
}
|
}
|
||||||
this.httpBasic.configure(this);
|
this.httpBasic.configure(this);
|
||||||
}
|
}
|
||||||
if(this.formLogin != null) {
|
if(this.formLogin != null) {
|
||||||
this.formLogin.authenticationManager(this.authenticationManager);
|
this.formLogin.authenticationManager(this.authenticationManager);
|
||||||
if(this.securityContextRepository != null) {
|
if(this.securityContextServerRepository != null) {
|
||||||
this.formLogin.securityContextRepository(this.securityContextRepository);
|
this.formLogin.securityContextRepository(this.securityContextServerRepository);
|
||||||
}
|
}
|
||||||
if(this.formLogin.serverAuthenticationEntryPoint == null) {
|
if(this.formLogin.serverAuthenticationEntryPoint == null) {
|
||||||
this.webFilters.add(new OrderedWebFilter(new LoginPageGeneratingWebFilter(), SecurityWebFiltersOrder.LOGIN_PAGE_GENERATING.getOrder()));
|
this.webFilters.add(new OrderedWebFilter(new LoginPageGeneratingWebFilter(), SecurityWebFiltersOrder.LOGIN_PAGE_GENERATING.getOrder()));
|
||||||
@ -233,7 +233,7 @@ public class HttpSecurity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private WebFilter securityContextRepositoryWebFilter() {
|
private WebFilter securityContextRepositoryWebFilter() {
|
||||||
SecurityContextRepository repository = this.securityContextRepository;
|
SecurityContextServerRepository repository = this.securityContextServerRepository;
|
||||||
if(repository == null) {
|
if(repository == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -322,7 +322,7 @@ public class HttpSecurity {
|
|||||||
public class HttpBasicBuilder {
|
public class HttpBasicBuilder {
|
||||||
private ReactiveAuthenticationManager authenticationManager;
|
private ReactiveAuthenticationManager authenticationManager;
|
||||||
|
|
||||||
private SecurityContextRepository securityContextRepository = new ServerWebExchangeAttributeSecurityContextRepository();
|
private SecurityContextServerRepository securityContextServerRepository = new ServerWebExchangeAttributeSecurityContextServerRepository();
|
||||||
|
|
||||||
private ServerAuthenticationEntryPoint entryPoint = new HttpBasicServerAuthenticationEntryPoint();
|
private ServerAuthenticationEntryPoint entryPoint = new HttpBasicServerAuthenticationEntryPoint();
|
||||||
|
|
||||||
@ -331,8 +331,8 @@ public class HttpSecurity {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public HttpBasicBuilder securityContextRepository(SecurityContextRepository securityContextRepository) {
|
public HttpBasicBuilder securityContextRepository(SecurityContextServerRepository securityContextServerRepository) {
|
||||||
this.securityContextRepository = securityContextRepository;
|
this.securityContextServerRepository = securityContextServerRepository;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -357,8 +357,8 @@ public class HttpSecurity {
|
|||||||
this.authenticationManager);
|
this.authenticationManager);
|
||||||
authenticationFilter.setAuthenticationFailureHandler(new AuthenticationEntryPointFailureHandler(this.entryPoint));
|
authenticationFilter.setAuthenticationFailureHandler(new AuthenticationEntryPointFailureHandler(this.entryPoint));
|
||||||
authenticationFilter.setAuthenticationConverter(new ServerHttpBasicAuthenticationConverter());
|
authenticationFilter.setAuthenticationConverter(new ServerHttpBasicAuthenticationConverter());
|
||||||
if(this.securityContextRepository != null) {
|
if(this.securityContextServerRepository != null) {
|
||||||
authenticationFilter.setSecurityContextRepository(this.securityContextRepository);
|
authenticationFilter.setSecurityContextServerRepository(this.securityContextServerRepository);
|
||||||
}
|
}
|
||||||
http.addFilterAt(authenticationFilter, SecurityWebFiltersOrder.HTTP_BASIC);
|
http.addFilterAt(authenticationFilter, SecurityWebFiltersOrder.HTTP_BASIC);
|
||||||
}
|
}
|
||||||
@ -373,7 +373,7 @@ public class HttpSecurity {
|
|||||||
public class FormLoginBuilder {
|
public class FormLoginBuilder {
|
||||||
private ReactiveAuthenticationManager authenticationManager;
|
private ReactiveAuthenticationManager authenticationManager;
|
||||||
|
|
||||||
private SecurityContextRepository securityContextRepository = new WebSessionSecurityContextRepository();
|
private SecurityContextServerRepository securityContextServerRepository = new WebSessionSecurityContextServerRepository();
|
||||||
|
|
||||||
private ServerAuthenticationEntryPoint serverAuthenticationEntryPoint;
|
private ServerAuthenticationEntryPoint serverAuthenticationEntryPoint;
|
||||||
|
|
||||||
@ -408,8 +408,8 @@ public class HttpSecurity {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public FormLoginBuilder securityContextRepository(SecurityContextRepository securityContextRepository) {
|
public FormLoginBuilder securityContextRepository(SecurityContextServerRepository securityContextServerRepository) {
|
||||||
this.securityContextRepository = securityContextRepository;
|
this.securityContextServerRepository = securityContextServerRepository;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -436,7 +436,7 @@ public class HttpSecurity {
|
|||||||
authenticationFilter.setAuthenticationFailureHandler(this.authenticationFailureHandler);
|
authenticationFilter.setAuthenticationFailureHandler(this.authenticationFailureHandler);
|
||||||
authenticationFilter.setAuthenticationConverter(new ServerFormLoginAuthenticationConverter());
|
authenticationFilter.setAuthenticationConverter(new ServerFormLoginAuthenticationConverter());
|
||||||
authenticationFilter.setAuthenticationSuccessHandler(new RedirectAuthenticationSuccessHandler("/"));
|
authenticationFilter.setAuthenticationSuccessHandler(new RedirectAuthenticationSuccessHandler("/"));
|
||||||
authenticationFilter.setSecurityContextRepository(this.securityContextRepository);
|
authenticationFilter.setSecurityContextServerRepository(this.securityContextServerRepository);
|
||||||
http.addFilterAt(authenticationFilter, SecurityWebFiltersOrder.FORM_LOGIN);
|
http.addFilterAt(authenticationFilter, SecurityWebFiltersOrder.FORM_LOGIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,8 +26,8 @@ import org.springframework.security.authentication.ReactiveAuthenticationManager
|
|||||||
import org.springframework.security.authentication.TestingAuthenticationToken;
|
import org.springframework.security.authentication.TestingAuthenticationToken;
|
||||||
import org.springframework.security.test.web.reactive.server.WebTestClientBuilder;
|
import org.springframework.security.test.web.reactive.server.WebTestClientBuilder;
|
||||||
import org.springframework.security.web.server.WebFilterChainProxy;
|
import org.springframework.security.web.server.WebFilterChainProxy;
|
||||||
import org.springframework.security.web.server.context.SecurityContextRepository;
|
import org.springframework.security.web.server.context.SecurityContextServerRepository;
|
||||||
import org.springframework.security.web.server.context.WebSessionSecurityContextRepository;
|
import org.springframework.security.web.server.context.WebSessionSecurityContextServerRepository;
|
||||||
import org.springframework.test.web.reactive.server.EntityExchangeResult;
|
import org.springframework.test.web.reactive.server.EntityExchangeResult;
|
||||||
import org.springframework.test.web.reactive.server.FluxExchangeResult;
|
import org.springframework.test.web.reactive.server.FluxExchangeResult;
|
||||||
import org.springframework.test.web.reactive.server.WebTestClient;
|
import org.springframework.test.web.reactive.server.WebTestClient;
|
||||||
@ -45,8 +45,7 @@ import static org.springframework.web.reactive.function.client.ExchangeFilterFun
|
|||||||
*/
|
*/
|
||||||
@RunWith(MockitoJUnitRunner.class)
|
@RunWith(MockitoJUnitRunner.class)
|
||||||
public class HttpSecurityTests {
|
public class HttpSecurityTests {
|
||||||
@Mock
|
@Mock SecurityContextServerRepository contextRepository;
|
||||||
SecurityContextRepository contextRepository;
|
|
||||||
@Mock
|
@Mock
|
||||||
ReactiveAuthenticationManager authenticationManager;
|
ReactiveAuthenticationManager authenticationManager;
|
||||||
|
|
||||||
@ -78,7 +77,7 @@ public class HttpSecurityTests {
|
|||||||
public void basic() {
|
public void basic() {
|
||||||
given(this.authenticationManager.authenticate(any())).willReturn(Mono.just(new TestingAuthenticationToken("rob", "rob", "ROLE_USER", "ROLE_ADMIN")));
|
given(this.authenticationManager.authenticate(any())).willReturn(Mono.just(new TestingAuthenticationToken("rob", "rob", "ROLE_USER", "ROLE_ADMIN")));
|
||||||
|
|
||||||
this.http.securityContextRepository(new WebSessionSecurityContextRepository());
|
this.http.securityContextRepository(new WebSessionSecurityContextServerRepository());
|
||||||
this.http.httpBasic();
|
this.http.httpBasic();
|
||||||
this.http.authenticationManager(this.authenticationManager);
|
this.http.authenticationManager(this.authenticationManager);
|
||||||
HttpSecurity.AuthorizeExchangeBuilder authorize = this.http.authorizeExchange();
|
HttpSecurity.AuthorizeExchangeBuilder authorize = this.http.authorizeExchange();
|
||||||
|
@ -26,9 +26,9 @@ import org.springframework.security.core.context.SecurityContextImpl;
|
|||||||
import org.springframework.security.web.server.ServerHttpBasicAuthenticationConverter;
|
import org.springframework.security.web.server.ServerHttpBasicAuthenticationConverter;
|
||||||
import org.springframework.security.web.server.WebFilterExchange;
|
import org.springframework.security.web.server.WebFilterExchange;
|
||||||
import org.springframework.security.web.server.authentication.www.HttpBasicServerAuthenticationEntryPoint;
|
import org.springframework.security.web.server.authentication.www.HttpBasicServerAuthenticationEntryPoint;
|
||||||
import org.springframework.security.web.server.context.SecurityContextRepository;
|
import org.springframework.security.web.server.context.SecurityContextServerRepository;
|
||||||
import org.springframework.security.web.server.context.SecurityContextRepositoryServerWebExchange;
|
import org.springframework.security.web.server.context.SecurityContextRepositoryServerWebExchange;
|
||||||
import org.springframework.security.web.server.context.ServerWebExchangeAttributeSecurityContextRepository;
|
import org.springframework.security.web.server.context.ServerWebExchangeAttributeSecurityContextServerRepository;
|
||||||
import org.springframework.security.web.server.util.matcher.ServerWebExchangeMatcher;
|
import org.springframework.security.web.server.util.matcher.ServerWebExchangeMatcher;
|
||||||
import org.springframework.security.web.server.util.matcher.ServerWebExchangeMatchers;
|
import org.springframework.security.web.server.util.matcher.ServerWebExchangeMatchers;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
@ -51,7 +51,7 @@ public class AuthenticationWebFilter implements WebFilter {
|
|||||||
|
|
||||||
private AuthenticationFailureHandler authenticationFailureHandler = new AuthenticationEntryPointFailureHandler(new HttpBasicServerAuthenticationEntryPoint());
|
private AuthenticationFailureHandler authenticationFailureHandler = new AuthenticationEntryPointFailureHandler(new HttpBasicServerAuthenticationEntryPoint());
|
||||||
|
|
||||||
private SecurityContextRepository securityContextRepository = new ServerWebExchangeAttributeSecurityContextRepository();
|
private SecurityContextServerRepository securityContextServerRepository = new ServerWebExchangeAttributeSecurityContextServerRepository();
|
||||||
|
|
||||||
private ServerWebExchangeMatcher requiresAuthenticationMatcher = ServerWebExchangeMatchers.anyExchange();
|
private ServerWebExchangeMatcher requiresAuthenticationMatcher = ServerWebExchangeMatchers.anyExchange();
|
||||||
|
|
||||||
@ -62,7 +62,7 @@ public class AuthenticationWebFilter implements WebFilter {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
|
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
|
||||||
ServerWebExchange wrappedExchange = new SecurityContextRepositoryServerWebExchange(exchange, this.securityContextRepository);
|
ServerWebExchange wrappedExchange = new SecurityContextRepositoryServerWebExchange(exchange, this.securityContextServerRepository);
|
||||||
return filterInternal(wrappedExchange, chain);
|
return filterInternal(wrappedExchange, chain);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,14 +86,14 @@ public class AuthenticationWebFilter implements WebFilter {
|
|||||||
ServerWebExchange exchange = webFilterExchange.getExchange();
|
ServerWebExchange exchange = webFilterExchange.getExchange();
|
||||||
SecurityContextImpl securityContext = new SecurityContextImpl();
|
SecurityContextImpl securityContext = new SecurityContextImpl();
|
||||||
securityContext.setAuthentication(authentication);
|
securityContext.setAuthentication(authentication);
|
||||||
return this.securityContextRepository.save(exchange, securityContext)
|
return this.securityContextServerRepository.save(exchange, securityContext)
|
||||||
.then(this.authenticationSuccessHandler.success(authentication, webFilterExchange));
|
.then(this.authenticationSuccessHandler.success(authentication, webFilterExchange));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSecurityContextRepository(
|
public void setSecurityContextServerRepository(
|
||||||
SecurityContextRepository securityContextRepository) {
|
SecurityContextServerRepository securityContextServerRepository) {
|
||||||
Assert.notNull(securityContextRepository, "securityContextRepository cannot be null");
|
Assert.notNull(securityContextServerRepository, "securityContextRepository cannot be null");
|
||||||
this.securityContextRepository = securityContextRepository;
|
this.securityContextServerRepository = securityContextServerRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAuthenticationSuccessHandler(AuthenticationSuccessHandler authenticationSuccessHandler) {
|
public void setAuthenticationSuccessHandler(AuthenticationSuccessHandler authenticationSuccessHandler) {
|
||||||
|
@ -19,9 +19,9 @@ package org.springframework.security.web.server.authentication.logout;
|
|||||||
import org.springframework.security.core.Authentication;
|
import org.springframework.security.core.Authentication;
|
||||||
import org.springframework.security.web.server.DefaultServerRedirectStrategy;
|
import org.springframework.security.web.server.DefaultServerRedirectStrategy;
|
||||||
import org.springframework.security.web.server.ServerRedirectStrategy;
|
import org.springframework.security.web.server.ServerRedirectStrategy;
|
||||||
import org.springframework.security.web.server.context.SecurityContextRepository;
|
import org.springframework.security.web.server.context.SecurityContextServerRepository;
|
||||||
import org.springframework.security.web.server.WebFilterExchange;
|
import org.springframework.security.web.server.WebFilterExchange;
|
||||||
import org.springframework.security.web.server.context.WebSessionSecurityContextRepository;
|
import org.springframework.security.web.server.context.WebSessionSecurityContextServerRepository;
|
||||||
import reactor.core.publisher.Mono;
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
@ -31,7 +31,7 @@ import java.net.URI;
|
|||||||
* @since 5.0
|
* @since 5.0
|
||||||
*/
|
*/
|
||||||
public class SecurityContextRepositoryLogoutHandler implements LogoutHandler {
|
public class SecurityContextRepositoryLogoutHandler implements LogoutHandler {
|
||||||
private SecurityContextRepository repository = new WebSessionSecurityContextRepository();
|
private SecurityContextServerRepository repository = new WebSessionSecurityContextServerRepository();
|
||||||
|
|
||||||
private URI logoutSuccessUrl = URI.create("/login?logout");
|
private URI logoutSuccessUrl = URI.create("/login?logout");
|
||||||
|
|
||||||
|
@ -27,9 +27,9 @@ import reactor.core.publisher.Mono;
|
|||||||
* @since 5.0
|
* @since 5.0
|
||||||
*/
|
*/
|
||||||
public class SecurityContextRepositoryServerWebExchange extends ServerWebExchangeDecorator {
|
public class SecurityContextRepositoryServerWebExchange extends ServerWebExchangeDecorator {
|
||||||
private final SecurityContextRepository repository;
|
private final SecurityContextServerRepository repository;
|
||||||
|
|
||||||
public SecurityContextRepositoryServerWebExchange(ServerWebExchange delegate, SecurityContextRepository repository) {
|
public SecurityContextRepositoryServerWebExchange(ServerWebExchange delegate, SecurityContextServerRepository repository) {
|
||||||
super(delegate);
|
super(delegate);
|
||||||
this.repository = repository;
|
this.repository = repository;
|
||||||
}
|
}
|
||||||
|
@ -15,8 +15,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.springframework.security.web.server.context;
|
package org.springframework.security.web.server.context;
|
||||||
|
|
||||||
import org.springframework.security.web.server.context.SecurityContextRepository;
|
|
||||||
import org.springframework.security.web.server.context.SecurityContextRepositoryServerWebExchange;
|
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
import org.springframework.web.server.ServerWebExchange;
|
import org.springframework.web.server.ServerWebExchange;
|
||||||
import org.springframework.web.server.WebFilter;
|
import org.springframework.web.server.WebFilter;
|
||||||
@ -28,9 +26,9 @@ import reactor.core.publisher.Mono;
|
|||||||
* @since 5.0
|
* @since 5.0
|
||||||
*/
|
*/
|
||||||
public class SecurityContextRepositoryWebFilter implements WebFilter {
|
public class SecurityContextRepositoryWebFilter implements WebFilter {
|
||||||
private final SecurityContextRepository repository;
|
private final SecurityContextServerRepository repository;
|
||||||
|
|
||||||
public SecurityContextRepositoryWebFilter(SecurityContextRepository repository) {
|
public SecurityContextRepositoryWebFilter(SecurityContextServerRepository repository) {
|
||||||
Assert.notNull(repository, "repository cannot be null");
|
Assert.notNull(repository, "repository cannot be null");
|
||||||
this.repository = repository;
|
this.repository = repository;
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ import org.springframework.web.server.ServerWebExchange;
|
|||||||
|
|
||||||
import reactor.core.publisher.Mono;
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
public interface SecurityContextRepository {
|
public interface SecurityContextServerRepository {
|
||||||
|
|
||||||
Mono<Void> save(ServerWebExchange exchange, SecurityContext context);
|
Mono<Void> save(ServerWebExchange exchange, SecurityContext context);
|
||||||
|
|
@ -25,7 +25,8 @@ import reactor.core.publisher.Mono;
|
|||||||
* @author Rob Winch
|
* @author Rob Winch
|
||||||
* @since 5.0
|
* @since 5.0
|
||||||
*/
|
*/
|
||||||
public class ServerWebExchangeAttributeSecurityContextRepository implements SecurityContextRepository {
|
public class ServerWebExchangeAttributeSecurityContextServerRepository
|
||||||
|
implements SecurityContextServerRepository {
|
||||||
final String ATTR = "USER";
|
final String ATTR = "USER";
|
||||||
|
|
||||||
public Mono<Void> save(ServerWebExchange exchange, SecurityContext context) {
|
public Mono<Void> save(ServerWebExchange exchange, SecurityContext context) {
|
@ -25,7 +25,8 @@ import reactor.core.publisher.Mono;
|
|||||||
* @author Rob Winch
|
* @author Rob Winch
|
||||||
* @since 5.0
|
* @since 5.0
|
||||||
*/
|
*/
|
||||||
public class WebSessionSecurityContextRepository implements SecurityContextRepository {
|
public class WebSessionSecurityContextServerRepository
|
||||||
|
implements SecurityContextServerRepository {
|
||||||
final String SESSION_ATTR = "USER";
|
final String SESSION_ATTR = "USER";
|
||||||
|
|
||||||
public Mono<Void> save(ServerWebExchange exchange, SecurityContext context) {
|
public Mono<Void> save(ServerWebExchange exchange, SecurityContext context) {
|
@ -30,7 +30,7 @@ import org.springframework.security.authentication.ReactiveAuthenticationManager
|
|||||||
import org.springframework.security.authentication.TestingAuthenticationToken;
|
import org.springframework.security.authentication.TestingAuthenticationToken;
|
||||||
import org.springframework.security.core.Authentication;
|
import org.springframework.security.core.Authentication;
|
||||||
import org.springframework.security.test.web.reactive.server.WebTestClientBuilder;
|
import org.springframework.security.test.web.reactive.server.WebTestClientBuilder;
|
||||||
import org.springframework.security.web.server.context.SecurityContextRepository;
|
import org.springframework.security.web.server.context.SecurityContextServerRepository;
|
||||||
import org.springframework.security.web.server.util.matcher.ServerWebExchangeMatcher;
|
import org.springframework.security.web.server.util.matcher.ServerWebExchangeMatcher;
|
||||||
import org.springframework.test.web.reactive.server.EntityExchangeResult;
|
import org.springframework.test.web.reactive.server.EntityExchangeResult;
|
||||||
import org.springframework.test.web.reactive.server.WebTestClient;
|
import org.springframework.test.web.reactive.server.WebTestClient;
|
||||||
@ -62,7 +62,7 @@ public class AuthenticationWebFilterTests {
|
|||||||
@Mock
|
@Mock
|
||||||
private AuthenticationFailureHandler failureHandler;
|
private AuthenticationFailureHandler failureHandler;
|
||||||
@Mock
|
@Mock
|
||||||
private SecurityContextRepository securityContextRepository;
|
private SecurityContextServerRepository securityContextServerRepository;
|
||||||
|
|
||||||
private AuthenticationWebFilter filter;
|
private AuthenticationWebFilter filter;
|
||||||
|
|
||||||
@ -71,7 +71,7 @@ public class AuthenticationWebFilterTests {
|
|||||||
this.filter = new AuthenticationWebFilter(this.authenticationManager);
|
this.filter = new AuthenticationWebFilter(this.authenticationManager);
|
||||||
this.filter.setAuthenticationSuccessHandler(this.successHandler);
|
this.filter.setAuthenticationSuccessHandler(this.successHandler);
|
||||||
this.filter.setAuthenticationConverter(this.authenticationConverter);
|
this.filter.setAuthenticationConverter(this.authenticationConverter);
|
||||||
this.filter.setSecurityContextRepository(this.securityContextRepository);
|
this.filter.setSecurityContextServerRepository(this.securityContextServerRepository);
|
||||||
this.filter.setAuthenticationFailureHandler(this.failureHandler);
|
this.filter.setAuthenticationFailureHandler(this.failureHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -154,7 +154,7 @@ public class AuthenticationWebFilterTests {
|
|||||||
.expectBody(String.class).consumeWith(b -> assertThat(b.getResponseBody()).isEqualTo("ok"))
|
.expectBody(String.class).consumeWith(b -> assertThat(b.getResponseBody()).isEqualTo("ok"))
|
||||||
.returnResult();
|
.returnResult();
|
||||||
|
|
||||||
verify(this.securityContextRepository, never()).save(any(), any());
|
verify(this.securityContextServerRepository, never()).save(any(), any());
|
||||||
verifyZeroInteractions(this.authenticationManager, this.successHandler,
|
verifyZeroInteractions(this.authenticationManager, this.successHandler,
|
||||||
this.failureHandler);
|
this.failureHandler);
|
||||||
}
|
}
|
||||||
@ -174,7 +174,7 @@ public class AuthenticationWebFilterTests {
|
|||||||
.expectStatus().is5xxServerError()
|
.expectStatus().is5xxServerError()
|
||||||
.expectBody().isEmpty();
|
.expectBody().isEmpty();
|
||||||
|
|
||||||
verify(this.securityContextRepository, never()).save(any(), any());
|
verify(this.securityContextServerRepository, never()).save(any(), any());
|
||||||
verifyZeroInteractions(this.authenticationManager, this.successHandler,
|
verifyZeroInteractions(this.authenticationManager, this.successHandler,
|
||||||
this.failureHandler);
|
this.failureHandler);
|
||||||
}
|
}
|
||||||
@ -185,7 +185,7 @@ public class AuthenticationWebFilterTests {
|
|||||||
when(this.authenticationConverter.apply(any())).thenReturn(authentication);
|
when(this.authenticationConverter.apply(any())).thenReturn(authentication);
|
||||||
when(this.authenticationManager.authenticate(any())).thenReturn(authentication);
|
when(this.authenticationManager.authenticate(any())).thenReturn(authentication);
|
||||||
when(this.successHandler.success(any(),any())).thenReturn(Mono.empty());
|
when(this.successHandler.success(any(),any())).thenReturn(Mono.empty());
|
||||||
when(this.securityContextRepository.save(any(),any())).thenAnswer( a -> Mono.just(a.getArguments()[0]));
|
when(this.securityContextServerRepository.save(any(),any())).thenAnswer( a -> Mono.just(a.getArguments()[0]));
|
||||||
|
|
||||||
WebTestClient client = WebTestClientBuilder
|
WebTestClient client = WebTestClientBuilder
|
||||||
.bindToWebFilters(this.filter)
|
.bindToWebFilters(this.filter)
|
||||||
@ -199,7 +199,7 @@ public class AuthenticationWebFilterTests {
|
|||||||
.expectBody().isEmpty();
|
.expectBody().isEmpty();
|
||||||
|
|
||||||
verify(this.successHandler).success(eq(authentication.block()), any());
|
verify(this.successHandler).success(eq(authentication.block()), any());
|
||||||
verify(this.securityContextRepository).save(any(), any());
|
verify(this.securityContextServerRepository).save(any(), any());
|
||||||
verifyZeroInteractions(this.failureHandler);
|
verifyZeroInteractions(this.failureHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -244,7 +244,7 @@ public class AuthenticationWebFilterTests {
|
|||||||
.expectBody().isEmpty();
|
.expectBody().isEmpty();
|
||||||
|
|
||||||
verify(this.failureHandler).onAuthenticationFailure(any(),any());
|
verify(this.failureHandler).onAuthenticationFailure(any(),any());
|
||||||
verify(this.securityContextRepository, never()).save(any(), any());
|
verify(this.securityContextServerRepository, never()).save(any(), any());
|
||||||
verifyZeroInteractions(this.successHandler);
|
verifyZeroInteractions(this.successHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -265,7 +265,7 @@ public class AuthenticationWebFilterTests {
|
|||||||
.expectStatus().is5xxServerError()
|
.expectStatus().is5xxServerError()
|
||||||
.expectBody().isEmpty();
|
.expectBody().isEmpty();
|
||||||
|
|
||||||
verify(this.securityContextRepository, never()).save(any(), any());
|
verify(this.securityContextServerRepository, never()).save(any(), any());
|
||||||
verifyZeroInteractions(this.successHandler, this.failureHandler);
|
verifyZeroInteractions(this.successHandler, this.failureHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,12 +40,11 @@ import static org.mockito.Mockito.*;
|
|||||||
* @since 5.0
|
* @since 5.0
|
||||||
*/
|
*/
|
||||||
@RunWith(MockitoJUnitRunner.class)
|
@RunWith(MockitoJUnitRunner.class)
|
||||||
public class SecurityContextRepositoryWebFilterTests {
|
public class SecurityContextServerRepositoryWebFilterTests {
|
||||||
@Mock
|
@Mock
|
||||||
Authentication principal;
|
Authentication principal;
|
||||||
|
|
||||||
@Mock
|
@Mock SecurityContextServerRepository repository;
|
||||||
SecurityContextRepository repository;
|
|
||||||
|
|
||||||
MockServerHttpRequest.BaseBuilder<?> exchange = MockServerHttpRequest.get("/");
|
MockServerHttpRequest.BaseBuilder<?> exchange = MockServerHttpRequest.get("/");
|
||||||
|
|
||||||
@ -62,7 +61,7 @@ public class SecurityContextRepositoryWebFilterTests {
|
|||||||
|
|
||||||
@Test(expected = IllegalArgumentException.class)
|
@Test(expected = IllegalArgumentException.class)
|
||||||
public void constructorNullSecurityContextRepository() {
|
public void constructorNullSecurityContextRepository() {
|
||||||
SecurityContextRepository repository = null;
|
SecurityContextServerRepository repository = null;
|
||||||
new SecurityContextRepositoryWebFilter(repository);
|
new SecurityContextRepositoryWebFilter(repository);
|
||||||
}
|
}
|
||||||
|
|
@ -29,8 +29,8 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||||||
* @author Rob Winch
|
* @author Rob Winch
|
||||||
* @since 5.0
|
* @since 5.0
|
||||||
*/
|
*/
|
||||||
public class ServerWebExchangeAttributeSecurityContextRepositoryTests {
|
public class ServerWebExchangeAttributeSecurityContextServerRepositoryTests {
|
||||||
ServerWebExchangeAttributeSecurityContextRepository repository = new ServerWebExchangeAttributeSecurityContextRepository();
|
ServerWebExchangeAttributeSecurityContextServerRepository repository = new ServerWebExchangeAttributeSecurityContextServerRepository();
|
||||||
ServerWebExchange exchange = MockServerHttpRequest.get("/").toExchange();
|
ServerWebExchange exchange = MockServerHttpRequest.get("/").toExchange();
|
||||||
|
|
||||||
@Test
|
@Test
|
Loading…
x
Reference in New Issue
Block a user