@ -1,5 +1,5 @@
@@ -1,5 +1,5 @@
/ *
* Copyright 2002 - 2022 the original author or authors .
* Copyright 2002 - 2023 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 .
@ -21,16 +21,20 @@ import java.util.function.Supplier;
@@ -21,16 +21,20 @@ import java.util.function.Supplier;
import org.junit.jupiter.api.Test ;
import org.springframework.mock.web.MockHttpServletRequest ;
import org.springframework.security.authentication.TestAuthentication ;
import org.springframework.security.authentication.TestingAuthenticationToken ;
import org.springframework.security.authorization.AuthenticatedAuthorizationManager ;
import org.springframework.security.authorization.AuthorityAuthorizationManager ;
import org.springframework.security.authorization.AuthorizationDecision ;
import org.springframework.security.core.Authentication ;
import org.springframework.security.web.servlet.util.matcher.MvcRequestMatcher ;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher ;
import org.springframework.security.web.util.matcher.AnyRequestMatcher ;
import org.springframework.security.web.util.matcher.RequestMatcherEntry ;
import static org.assertj.core.api.Assertions.assertThat ;
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException ;
import static org.assertj.core.api.Assertions.assertThatIllegalStateException ;
/ * *
* Tests for { @link RequestMatcherDelegatingAuthorizationManager } .
@ -120,4 +124,225 @@ public class RequestMatcherDelegatingAuthorizationManagerTests {
@@ -120,4 +124,225 @@ public class RequestMatcherDelegatingAuthorizationManagerTests {
. withMessage ( "mappingsConsumer cannot be null" ) ;
}
@Test
public void mappingsWhenConfiguredAfterAnyRequestThenException ( ) {
assertThatIllegalStateException ( )
. isThrownBy ( ( ) - > RequestMatcherDelegatingAuthorizationManager . builder ( ) . anyRequest ( ) . authenticated ( )
. mappings ( ( m ) - > m . add ( new RequestMatcherEntry < > ( AnyRequestMatcher . INSTANCE ,
AuthenticatedAuthorizationManager . authenticated ( ) ) ) ) )
. withMessage ( "Can't configure mappings after anyRequest" ) ;
}
@Test
public void addWhenConfiguredAfterAnyRequestThenException ( ) {
assertThatIllegalStateException ( )
. isThrownBy ( ( ) - > RequestMatcherDelegatingAuthorizationManager . builder ( ) . anyRequest ( ) . authenticated ( )
. add ( AnyRequestMatcher . INSTANCE , AuthenticatedAuthorizationManager . authenticated ( ) ) )
. withMessage ( "Can't add mappings after anyRequest" ) ;
}
@Test
public void requestMatchersWhenConfiguredAfterAnyRequestThenException ( ) {
assertThatIllegalStateException ( )
. isThrownBy ( ( ) - > RequestMatcherDelegatingAuthorizationManager . builder ( ) . anyRequest ( ) . authenticated ( )
. requestMatchers ( new AntPathRequestMatcher ( "/authenticated" ) ) . authenticated ( ) . build ( ) )
. withMessage ( "Can't configure requestMatchers after anyRequest" ) ;
}
@Test
public void anyRequestWhenConfiguredAfterAnyRequestThenException ( ) {
assertThatIllegalStateException ( ) . isThrownBy ( ( ) - > RequestMatcherDelegatingAuthorizationManager . builder ( )
. anyRequest ( ) . authenticated ( ) . anyRequest ( ) . authenticated ( ) . build ( ) )
. withMessage ( "Can't configure anyRequest after itself" ) ;
}
@Test
public void anyRequestWhenPermitAllThenGrantedDecision ( ) {
RequestMatcherDelegatingAuthorizationManager manager = RequestMatcherDelegatingAuthorizationManager . builder ( )
. anyRequest ( ) . permitAll ( ) . build ( ) ;
AuthorizationDecision decision = manager . check ( TestAuthentication : : anonymousUser , null ) ;
assertThat ( decision ) . isNotNull ( ) ;
assertThat ( decision . isGranted ( ) ) . isTrue ( ) ;
}
@Test
public void anyRequestWhenDenyAllThenDeniedDecision ( ) {
RequestMatcherDelegatingAuthorizationManager manager = RequestMatcherDelegatingAuthorizationManager . builder ( )
. anyRequest ( ) . denyAll ( ) . build ( ) ;
AuthorizationDecision decision = manager . check ( TestAuthentication : : authenticatedAdmin , null ) ;
assertThat ( decision ) . isNotNull ( ) ;
assertThat ( decision . isGranted ( ) ) . isFalse ( ) ;
}
@Test
public void authenticatedWhenAuthenticatedUserThenGrantedDecision ( ) {
RequestMatcherDelegatingAuthorizationManager manager = RequestMatcherDelegatingAuthorizationManager . builder ( )
. anyRequest ( ) . authenticated ( ) . build ( ) ;
AuthorizationDecision decision = manager . check ( TestAuthentication : : authenticatedUser , null ) ;
assertThat ( decision ) . isNotNull ( ) ;
assertThat ( decision . isGranted ( ) ) . isTrue ( ) ;
}
@Test
public void authenticatedWhenAnonymousUserThenDeniedDecision ( ) {
RequestMatcherDelegatingAuthorizationManager manager = RequestMatcherDelegatingAuthorizationManager . builder ( )
. anyRequest ( ) . authenticated ( ) . build ( ) ;
AuthorizationDecision decision = manager . check ( TestAuthentication : : anonymousUser , null ) ;
assertThat ( decision ) . isNotNull ( ) ;
assertThat ( decision . isGranted ( ) ) . isFalse ( ) ;
}
@Test
public void fullyAuthenticatedWhenAuthenticatedUserThenGrantedDecision ( ) {
RequestMatcherDelegatingAuthorizationManager manager = RequestMatcherDelegatingAuthorizationManager . builder ( )
. anyRequest ( ) . fullyAuthenticated ( ) . build ( ) ;
AuthorizationDecision decision = manager . check ( TestAuthentication : : authenticatedUser , null ) ;
assertThat ( decision ) . isNotNull ( ) ;
assertThat ( decision . isGranted ( ) ) . isTrue ( ) ;
}
@Test
public void fullyAuthenticatedWhenAnonymousUserThenDeniedDecision ( ) {
RequestMatcherDelegatingAuthorizationManager manager = RequestMatcherDelegatingAuthorizationManager . builder ( )
. anyRequest ( ) . fullyAuthenticated ( ) . build ( ) ;
AuthorizationDecision decision = manager . check ( TestAuthentication : : anonymousUser , null ) ;
assertThat ( decision ) . isNotNull ( ) ;
assertThat ( decision . isGranted ( ) ) . isFalse ( ) ;
}
@Test
public void fullyAuthenticatedWhenRememberMeUserThenDeniedDecision ( ) {
RequestMatcherDelegatingAuthorizationManager manager = RequestMatcherDelegatingAuthorizationManager . builder ( )
. anyRequest ( ) . fullyAuthenticated ( ) . build ( ) ;
AuthorizationDecision decision = manager . check ( TestAuthentication : : rememberMeUser , null ) ;
assertThat ( decision ) . isNotNull ( ) ;
assertThat ( decision . isGranted ( ) ) . isFalse ( ) ;
}
@Test
public void rememberMeWhenRememberMeUserThenGrantedDecision ( ) {
RequestMatcherDelegatingAuthorizationManager manager = RequestMatcherDelegatingAuthorizationManager . builder ( )
. anyRequest ( ) . rememberMe ( ) . build ( ) ;
AuthorizationDecision decision = manager . check ( TestAuthentication : : rememberMeUser , null ) ;
assertThat ( decision ) . isNotNull ( ) ;
assertThat ( decision . isGranted ( ) ) . isTrue ( ) ;
}
@Test
public void rememberMeWhenAuthenticatedUserThenDeniedDecision ( ) {
RequestMatcherDelegatingAuthorizationManager manager = RequestMatcherDelegatingAuthorizationManager . builder ( )
. anyRequest ( ) . rememberMe ( ) . build ( ) ;
AuthorizationDecision decision = manager . check ( TestAuthentication : : authenticatedUser , null ) ;
assertThat ( decision ) . isNotNull ( ) ;
assertThat ( decision . isGranted ( ) ) . isFalse ( ) ;
}
@Test
public void anonymousWhenAnonymousUserThenGrantedDecision ( ) {
RequestMatcherDelegatingAuthorizationManager manager = RequestMatcherDelegatingAuthorizationManager . builder ( )
. anyRequest ( ) . anonymous ( ) . build ( ) ;
AuthorizationDecision decision = manager . check ( TestAuthentication : : anonymousUser , null ) ;
assertThat ( decision ) . isNotNull ( ) ;
assertThat ( decision . isGranted ( ) ) . isTrue ( ) ;
}
@Test
public void anonymousWhenAuthenticatedUserThenDeniedDecision ( ) {
RequestMatcherDelegatingAuthorizationManager manager = RequestMatcherDelegatingAuthorizationManager . builder ( )
. anyRequest ( ) . anonymous ( ) . build ( ) ;
AuthorizationDecision decision = manager . check ( TestAuthentication : : authenticatedUser , null ) ;
assertThat ( decision ) . isNotNull ( ) ;
assertThat ( decision . isGranted ( ) ) . isFalse ( ) ;
}
@Test
public void hasRoleAdminWhenAuthenticatedUserThenDeniedDecision ( ) {
RequestMatcherDelegatingAuthorizationManager manager = RequestMatcherDelegatingAuthorizationManager . builder ( )
. anyRequest ( ) . hasRole ( "ADMIN" ) . build ( ) ;
AuthorizationDecision decision = manager . check ( TestAuthentication : : authenticatedUser , null ) ;
assertThat ( decision ) . isNotNull ( ) ;
assertThat ( decision . isGranted ( ) ) . isFalse ( ) ;
}
@Test
public void hasRoleAdminWhenAuthenticatedAdminThenGrantedDecision ( ) {
RequestMatcherDelegatingAuthorizationManager manager = RequestMatcherDelegatingAuthorizationManager . builder ( )
. anyRequest ( ) . hasRole ( "ADMIN" ) . build ( ) ;
AuthorizationDecision decision = manager . check ( TestAuthentication : : authenticatedAdmin , null ) ;
assertThat ( decision ) . isNotNull ( ) ;
assertThat ( decision . isGranted ( ) ) . isTrue ( ) ;
}
@Test
public void hasAnyRoleUserOrAdminWhenAuthenticatedUserThenGrantedDecision ( ) {
RequestMatcherDelegatingAuthorizationManager manager = RequestMatcherDelegatingAuthorizationManager . builder ( )
. anyRequest ( ) . hasAnyRole ( "USER" , "ADMIN" ) . build ( ) ;
AuthorizationDecision decision = manager . check ( TestAuthentication : : authenticatedUser , null ) ;
assertThat ( decision ) . isNotNull ( ) ;
assertThat ( decision . isGranted ( ) ) . isTrue ( ) ;
}
@Test
public void hasAnyRoleUserOrAdminWhenAuthenticatedAdminThenGrantedDecision ( ) {
RequestMatcherDelegatingAuthorizationManager manager = RequestMatcherDelegatingAuthorizationManager . builder ( )
. anyRequest ( ) . hasAnyRole ( "USER" , "ADMIN" ) . build ( ) ;
AuthorizationDecision decision = manager . check ( TestAuthentication : : authenticatedAdmin , null ) ;
assertThat ( decision ) . isNotNull ( ) ;
assertThat ( decision . isGranted ( ) ) . isTrue ( ) ;
}
@Test
public void hasAnyRoleUserOrAdminWhenAnonymousUserThenDeniedDecision ( ) {
RequestMatcherDelegatingAuthorizationManager manager = RequestMatcherDelegatingAuthorizationManager . builder ( )
. anyRequest ( ) . hasAnyRole ( "USER" , "ADMIN" ) . build ( ) ;
AuthorizationDecision decision = manager . check ( TestAuthentication : : anonymousUser , null ) ;
assertThat ( decision ) . isNotNull ( ) ;
assertThat ( decision . isGranted ( ) ) . isFalse ( ) ;
}
@Test
public void hasAuthorityRoleAdminWhenAuthenticatedUserThenDeniedDecision ( ) {
RequestMatcherDelegatingAuthorizationManager manager = RequestMatcherDelegatingAuthorizationManager . builder ( )
. anyRequest ( ) . hasAuthority ( "ROLE_ADMIN" ) . build ( ) ;
AuthorizationDecision decision = manager . check ( TestAuthentication : : authenticatedUser , null ) ;
assertThat ( decision ) . isNotNull ( ) ;
assertThat ( decision . isGranted ( ) ) . isFalse ( ) ;
}
@Test
public void hasAuthorityRoleAdminWhenAuthenticatedAdminThenGrantedDecision ( ) {
RequestMatcherDelegatingAuthorizationManager manager = RequestMatcherDelegatingAuthorizationManager . builder ( )
. anyRequest ( ) . hasAuthority ( "ROLE_ADMIN" ) . build ( ) ;
AuthorizationDecision decision = manager . check ( TestAuthentication : : authenticatedAdmin , null ) ;
assertThat ( decision ) . isNotNull ( ) ;
assertThat ( decision . isGranted ( ) ) . isTrue ( ) ;
}
@Test
public void hasAnyAuthorityRoleUserOrAdminWhenAuthenticatedUserThenGrantedDecision ( ) {
RequestMatcherDelegatingAuthorizationManager manager = RequestMatcherDelegatingAuthorizationManager . builder ( )
. anyRequest ( ) . hasAnyAuthority ( "ROLE_USER" , "ROLE_ADMIN" ) . build ( ) ;
AuthorizationDecision decision = manager . check ( TestAuthentication : : authenticatedUser , null ) ;
assertThat ( decision ) . isNotNull ( ) ;
assertThat ( decision . isGranted ( ) ) . isTrue ( ) ;
}
@Test
public void hasAnyAuthorityRoleUserOrAdminWhenAuthenticatedAdminThenGrantedDecision ( ) {
RequestMatcherDelegatingAuthorizationManager manager = RequestMatcherDelegatingAuthorizationManager . builder ( )
. anyRequest ( ) . hasAnyAuthority ( "ROLE_USER" , "ROLE_ADMIN" ) . build ( ) ;
AuthorizationDecision decision = manager . check ( TestAuthentication : : authenticatedAdmin , null ) ;
assertThat ( decision ) . isNotNull ( ) ;
assertThat ( decision . isGranted ( ) ) . isTrue ( ) ;
}
@Test
public void hasAnyAuthorityRoleUserOrAdminWhenAnonymousUserThenDeniedDecision ( ) {
RequestMatcherDelegatingAuthorizationManager manager = RequestMatcherDelegatingAuthorizationManager . builder ( )
. anyRequest ( ) . hasAnyRole ( "USER" , "ADMIN" ) . build ( ) ;
AuthorizationDecision decision = manager . check ( TestAuthentication : : anonymousUser , null ) ;
assertThat ( decision ) . isNotNull ( ) ;
assertThat ( decision . isGranted ( ) ) . isFalse ( ) ;
}
}