|
@@ -22,10 +22,14 @@ import org.aopalliance.intercept.MethodInvocation;
|
|
|
|
|
|
import org.springframework.beans.factory.ObjectProvider;
|
|
import org.springframework.beans.factory.ObjectProvider;
|
|
import org.springframework.beans.factory.config.BeanDefinition;
|
|
import org.springframework.beans.factory.config.BeanDefinition;
|
|
|
|
+import org.springframework.context.ApplicationContext;
|
|
import org.springframework.context.annotation.Bean;
|
|
import org.springframework.context.annotation.Bean;
|
|
import org.springframework.context.annotation.Configuration;
|
|
import org.springframework.context.annotation.Configuration;
|
|
import org.springframework.context.annotation.Role;
|
|
import org.springframework.context.annotation.Role;
|
|
import org.springframework.security.access.annotation.Secured;
|
|
import org.springframework.security.access.annotation.Secured;
|
|
|
|
+import org.springframework.security.access.hierarchicalroles.NullRoleHierarchy;
|
|
|
|
+import org.springframework.security.access.hierarchicalroles.RoleHierarchy;
|
|
|
|
+import org.springframework.security.authorization.AuthoritiesAuthorizationManager;
|
|
import org.springframework.security.authorization.AuthorizationManager;
|
|
import org.springframework.security.authorization.AuthorizationManager;
|
|
import org.springframework.security.authorization.method.AuthorizationManagerBeforeMethodInterceptor;
|
|
import org.springframework.security.authorization.method.AuthorizationManagerBeforeMethodInterceptor;
|
|
import org.springframework.security.authorization.method.SecuredAuthorizationManager;
|
|
import org.springframework.security.authorization.method.SecuredAuthorizationManager;
|
|
@@ -48,8 +52,13 @@ final class SecuredMethodSecurityConfiguration {
|
|
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
|
|
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
|
|
static MethodInterceptor securedAuthorizationMethodInterceptor(
|
|
static MethodInterceptor securedAuthorizationMethodInterceptor(
|
|
ObjectProvider<SecurityContextHolderStrategy> strategyProvider,
|
|
ObjectProvider<SecurityContextHolderStrategy> strategyProvider,
|
|
- ObjectProvider<ObservationRegistry> registryProvider) {
|
|
|
|
|
|
+ ObjectProvider<ObservationRegistry> registryProvider, ApplicationContext context) {
|
|
SecuredAuthorizationManager secured = new SecuredAuthorizationManager();
|
|
SecuredAuthorizationManager secured = new SecuredAuthorizationManager();
|
|
|
|
+ AuthoritiesAuthorizationManager authoritiesAuthorizationManager = new AuthoritiesAuthorizationManager();
|
|
|
|
+ RoleHierarchy roleHierarchy = (context.getBeanNamesForType(RoleHierarchy.class).length > 0)
|
|
|
|
+ ? context.getBean(RoleHierarchy.class) : new NullRoleHierarchy();
|
|
|
|
+ authoritiesAuthorizationManager.setRoleHierarchy(roleHierarchy);
|
|
|
|
+ secured.setAuthoritiesAuthorizationManager(authoritiesAuthorizationManager);
|
|
SecurityContextHolderStrategy strategy = strategyProvider
|
|
SecurityContextHolderStrategy strategy = strategyProvider
|
|
.getIfAvailable(SecurityContextHolder::getContextHolderStrategy);
|
|
.getIfAvailable(SecurityContextHolder::getContextHolderStrategy);
|
|
AuthorizationManager<MethodInvocation> manager = new DeferringObservationAuthorizationManager<>(
|
|
AuthorizationManager<MethodInvocation> manager = new DeferringObservationAuthorizationManager<>(
|