From 0cab7c8f15ab98e97b10458d63ed3d85601b0903 Mon Sep 17 00:00:00 2001 From: Josh Cummings Date: Tue, 20 Aug 2024 16:47:29 -0600 Subject: [PATCH] Defer Sorting AuthorizationAdvisors Invoking AnnotationAwareOrderComparator#sort while the AuthorizationAdvisors are still being computed causes those advisors to be eagerly instantiated, making components like ObservationRegistry ineligible for post processing. This commit defers the sorting of the advisors until after they are all fully instantiated and available in the application context. Closes gh-15658 --- .../authorization/method/AuthorizationAdvisorProxyFactory.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/src/main/java/org/springframework/security/authorization/method/AuthorizationAdvisorProxyFactory.java b/core/src/main/java/org/springframework/security/authorization/method/AuthorizationAdvisorProxyFactory.java index 42248b3da26..3bc69949c81 100644 --- a/core/src/main/java/org/springframework/security/authorization/method/AuthorizationAdvisorProxyFactory.java +++ b/core/src/main/java/org/springframework/security/authorization/method/AuthorizationAdvisorProxyFactory.java @@ -146,6 +146,7 @@ public static AuthorizationAdvisorProxyFactory withReactiveDefaults() { */ @Override public Object proxy(Object target) { + AnnotationAwareOrderComparator.sort(this.advisors); if (target == null) { return null; } @@ -170,7 +171,6 @@ public Object proxy(Object target) { */ public void setAdvisors(AuthorizationAdvisor... advisors) { this.advisors = new ArrayList<>(List.of(advisors)); - AnnotationAwareOrderComparator.sort(this.advisors); } /** @@ -182,7 +182,6 @@ public void setAdvisors(AuthorizationAdvisor... advisors) { */ public void setAdvisors(Collection advisors) { this.advisors = new ArrayList<>(advisors); - AnnotationAwareOrderComparator.sort(this.advisors); } /**