@ -46,6 +46,8 @@ import org.springframework.security.access.annotation.ExpressionProtectedBusines
@@ -46,6 +46,8 @@ import org.springframework.security.access.annotation.ExpressionProtectedBusines
import org.springframework.security.access.annotation.Jsr250BusinessServiceImpl ;
import org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler ;
import org.springframework.security.access.expression.method.MethodSecurityExpressionHandler ;
import org.springframework.security.access.hierarchicalroles.RoleHierarchy ;
import org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl ;
import org.springframework.security.authorization.AuthorizationDecision ;
import org.springframework.security.authorization.AuthorizationEventPublisher ;
import org.springframework.security.authorization.AuthorizationManager ;
@ -447,6 +449,24 @@ public class PrePostMethodSecurityConfigurationTests {
@@ -447,6 +449,24 @@ public class PrePostMethodSecurityConfigurationTests {
. autowire ( ) ;
}
@WithMockUser ( roles = "ADMIN" )
@Test
public void methodSecurityAdminWhenRoleHierarchyBeanAvailableThenUses ( ) {
this . spring . register ( RoleHierarchyConfig . class , MethodSecurityServiceConfig . class ) . autowire ( ) ;
this . methodSecurityService . preAuthorizeAdmin ( ) ;
this . methodSecurityService . secured ( ) ;
this . methodSecurityService . jsr250RolesAllowed ( ) ;
}
@WithMockUser
@Test
public void methodSecurityUserWhenRoleHierarchyBeanAvailableThenUses ( ) {
this . spring . register ( RoleHierarchyConfig . class , MethodSecurityServiceConfig . class ) . autowire ( ) ;
this . methodSecurityService . preAuthorizeUser ( ) ;
this . methodSecurityService . securedUser ( ) ;
this . methodSecurityService . jsr250RolesAllowed ( ) ;
}
private static Consumer < ConfigurableWebApplicationContext > disallowBeanOverriding ( ) {
return ( context ) - > ( ( AnnotationConfigWebApplicationContext ) context ) . setAllowBeanDefinitionOverriding ( false ) ;
}
@ -627,4 +647,17 @@ public class PrePostMethodSecurityConfigurationTests {
@@ -627,4 +647,17 @@ public class PrePostMethodSecurityConfigurationTests {
}
@Configuration
@EnableMethodSecurity ( jsr250Enabled = true , securedEnabled = true )
static class RoleHierarchyConfig {
@Bean
RoleHierarchy roleHierarchy ( ) {
RoleHierarchyImpl roleHierarchyImpl = new RoleHierarchyImpl ( ) ;
roleHierarchyImpl . setHierarchy ( "ADMIN > USER" ) ;
return roleHierarchyImpl ;
}
}
}