Skip to content

Commit 3f65f60

Browse files
kse-musicjzheaux
authored andcommitted
Use AuthorizationEventPublisher Bean
- For Jsr250MethodInterceptor and SecuredMethodInterceptor Closes gh-14401
1 parent 0627815 commit 3f65f60

File tree

3 files changed

+33
-4
lines changed

3 files changed

+33
-4
lines changed

config/src/main/java/org/springframework/security/config/annotation/method/configuration/Jsr250MethodSecurityConfiguration.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2023 the original author or authors.
2+
* Copyright 2002-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -30,6 +30,7 @@
3030
import org.springframework.security.access.hierarchicalroles.NullRoleHierarchy;
3131
import org.springframework.security.access.hierarchicalroles.RoleHierarchy;
3232
import org.springframework.security.authorization.AuthoritiesAuthorizationManager;
33+
import org.springframework.security.authorization.AuthorizationEventPublisher;
3334
import org.springframework.security.authorization.AuthorizationManager;
3435
import org.springframework.security.authorization.method.AuthorizationManagerBeforeMethodInterceptor;
3536
import org.springframework.security.authorization.method.Jsr250AuthorizationManager;
@@ -56,6 +57,7 @@ final class Jsr250MethodSecurityConfiguration implements ImportAware {
5657
static MethodInterceptor jsr250AuthorizationMethodInterceptor(
5758
ObjectProvider<GrantedAuthorityDefaults> defaultsProvider,
5859
ObjectProvider<SecurityContextHolderStrategy> strategyProvider,
60+
ObjectProvider<AuthorizationEventPublisher> eventPublisherProvider,
5961
ObjectProvider<ObservationRegistry> registryProvider, ObjectProvider<RoleHierarchy> roleHierarchyProvider,
6062
Jsr250MethodSecurityConfiguration configuration) {
6163
Jsr250AuthorizationManager jsr250 = new Jsr250AuthorizationManager();
@@ -72,6 +74,7 @@ static MethodInterceptor jsr250AuthorizationMethodInterceptor(
7274
.jsr250(manager);
7375
interceptor.setOrder(interceptor.getOrder() + configuration.interceptorOrderOffset);
7476
interceptor.setSecurityContextHolderStrategy(strategy);
77+
eventPublisherProvider.ifAvailable(interceptor::setAuthorizationEventPublisher);
7578
return interceptor;
7679
}
7780

config/src/main/java/org/springframework/security/config/annotation/method/configuration/SecuredMethodSecurityConfiguration.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2023 the original author or authors.
2+
* Copyright 2002-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -31,6 +31,7 @@
3131
import org.springframework.security.access.hierarchicalroles.NullRoleHierarchy;
3232
import org.springframework.security.access.hierarchicalroles.RoleHierarchy;
3333
import org.springframework.security.authorization.AuthoritiesAuthorizationManager;
34+
import org.springframework.security.authorization.AuthorizationEventPublisher;
3435
import org.springframework.security.authorization.AuthorizationManager;
3536
import org.springframework.security.authorization.method.AuthorizationManagerBeforeMethodInterceptor;
3637
import org.springframework.security.authorization.method.SecuredAuthorizationManager;
@@ -55,6 +56,7 @@ final class SecuredMethodSecurityConfiguration implements ImportAware {
5556
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
5657
static MethodInterceptor securedAuthorizationMethodInterceptor(
5758
ObjectProvider<SecurityContextHolderStrategy> strategyProvider,
59+
ObjectProvider<AuthorizationEventPublisher> eventPublisherProvider,
5860
ObjectProvider<ObservationRegistry> registryProvider, ObjectProvider<RoleHierarchy> roleHierarchyProvider,
5961
SecuredMethodSecurityConfiguration configuration) {
6062
SecuredAuthorizationManager secured = new SecuredAuthorizationManager();
@@ -70,6 +72,7 @@ static MethodInterceptor securedAuthorizationMethodInterceptor(
7072
.secured(manager);
7173
interceptor.setOrder(interceptor.getOrder() + configuration.interceptorOrderOffset);
7274
interceptor.setSecurityContextHolderStrategy(strategy);
75+
eventPublisherProvider.ifAvailable(interceptor::setAuthorizationEventPublisher);
7376
return interceptor;
7477
}
7578

config/src/test/java/org/springframework/security/config/annotation/method/configuration/PrePostMethodSecurityConfigurationTests.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2023 the original author or authors.
2+
* Copyright 2002-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -442,7 +442,6 @@ public void configureWhenAspectJThenRegistersAspects() {
442442
assertThat(this.spring.getContext().containsBean("annotationSecurityAspect$0")).isFalse();
443443
}
444444

445-
// gh-13572
446445
@Test
447446
public void configureWhenBeanOverridingDisallowedThenWorks() {
448447
this.spring.register(MethodSecurityServiceConfig.class, BusinessServiceConfig.class)
@@ -468,6 +467,30 @@ public void methodSecurityUserWhenRoleHierarchyBeanAvailableThenUses() {
468467
this.methodSecurityService.jsr250RolesAllowedUser();
469468
}
470469

470+
@WithMockUser(roles = "ADMIN")
471+
@Test
472+
public void methodSecurityAdminWhenAuthorizationEventPublisherBeanAvailableThenUses() {
473+
this.spring
474+
.register(RoleHierarchyConfig.class, MethodSecurityServiceConfig.class,
475+
AuthorizationEventPublisherConfig.class)
476+
.autowire();
477+
this.methodSecurityService.preAuthorizeUser();
478+
this.methodSecurityService.securedUser();
479+
this.methodSecurityService.jsr250RolesAllowedUser();
480+
}
481+
482+
@WithMockUser
483+
@Test
484+
public void methodSecurityUserWhenAuthorizationEventPublisherBeanAvailableThenUses() {
485+
this.spring
486+
.register(RoleHierarchyConfig.class, MethodSecurityServiceConfig.class,
487+
AuthorizationEventPublisherConfig.class)
488+
.autowire();
489+
this.methodSecurityService.preAuthorizeUser();
490+
this.methodSecurityService.securedUser();
491+
this.methodSecurityService.jsr250RolesAllowedUser();
492+
}
493+
471494
@Test
472495
public void allAnnotationsWhenAdviceBeforeOffsetPreFilterThenReturnsFilteredList() {
473496
this.spring.register(ReturnBeforeOffsetPreFilterConfig.class).autowire();

0 commit comments

Comments
 (0)