Pick Up TargetVisitor Beans

Closes gh-16923
This commit is contained in:
Josh Cummings 2025-04-10 10:41:36 -06:00
parent 5841e35cae
commit 6438603cb6
No known key found for this signature in database
GPG Key ID: 869B37A20E876129
2 changed files with 17 additions and 6 deletions

View File

@ -32,6 +32,7 @@ import org.springframework.security.aot.hint.SecurityHintsRegistrar;
import org.springframework.security.authorization.AuthorizationProxyFactory; import org.springframework.security.authorization.AuthorizationProxyFactory;
import org.springframework.security.authorization.method.AuthorizationAdvisor; import org.springframework.security.authorization.method.AuthorizationAdvisor;
import org.springframework.security.authorization.method.AuthorizationAdvisorProxyFactory; import org.springframework.security.authorization.method.AuthorizationAdvisorProxyFactory;
import org.springframework.security.authorization.method.AuthorizationAdvisorProxyFactory.TargetVisitor;
import org.springframework.security.authorization.method.AuthorizeReturnObjectMethodInterceptor; import org.springframework.security.authorization.method.AuthorizeReturnObjectMethodInterceptor;
import org.springframework.security.config.Customizer; import org.springframework.security.config.Customizer;
@ -41,11 +42,15 @@ final class AuthorizationProxyConfiguration implements AopInfrastructureBean {
@Bean @Bean
@Role(BeanDefinition.ROLE_INFRASTRUCTURE) @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
static AuthorizationAdvisorProxyFactory authorizationProxyFactory( static AuthorizationAdvisorProxyFactory authorizationProxyFactory(
ObjectProvider<AuthorizationAdvisor> authorizationAdvisors, ObjectProvider<AuthorizationAdvisor> authorizationAdvisors, ObjectProvider<TargetVisitor> targetVisitors,
ObjectProvider<Customizer<AuthorizationAdvisorProxyFactory>> customizers) { ObjectProvider<Customizer<AuthorizationAdvisorProxyFactory>> customizers) {
List<AuthorizationAdvisor> advisors = new ArrayList<>(); List<AuthorizationAdvisor> advisors = new ArrayList<>();
authorizationAdvisors.forEach(advisors::add); authorizationAdvisors.forEach(advisors::add);
List<TargetVisitor> visitors = new ArrayList<>();
targetVisitors.orderedStream().forEach(visitors::add);
visitors.add(TargetVisitor.defaults());
AuthorizationAdvisorProxyFactory factory = new AuthorizationAdvisorProxyFactory(advisors); AuthorizationAdvisorProxyFactory factory = new AuthorizationAdvisorProxyFactory(advisors);
factory.setTargetVisitor(TargetVisitor.of(visitors.toArray(TargetVisitor[]::new)));
customizers.forEach((c) -> c.customize(factory)); customizers.forEach((c) -> c.customize(factory));
return factory; return factory;
} }

View File

@ -2143,9 +2143,13 @@ Java::
+ +
[source,java,role="primary"] [source,java,role="primary"]
---- ----
import org.springframework.security.authorization.method.AuthorizationAdvisorProxyFactory.TargetVisitor;
// ...
@Bean @Bean
static Customizer<AuthorizationAdvisorProxyFactory> skipValueTypes() { static TargetVisitor skipValueTypes() {
return (factory) -> factory.setTargetVisitor(TargetVisitor.defaultsSkipValueTypes()); return TargetVisitor.defaultsSkipValueTypes();
} }
---- ----
@ -2153,10 +2157,12 @@ Kotlin::
+ +
[source,kotlin,role="secondary"] [source,kotlin,role="secondary"]
---- ----
import org.springframework.security.authorization.method.AuthorizationAdvisorProxyFactory.TargetVisitor
// ...
@Bean @Bean
open fun skipValueTypes() = Customizer<AuthorizationAdvisorProxyFactory> { open fun skipValueTypes() = TargetVisitor.defaultsSkipValueTypes()
it.setTargetVisitor(TargetVisitor.defaultsSkipValueTypes())
}
---- ----
====== ======