Skip to content

Commit 9a93174

Browse files
committed
Deprecate PrePostTemplateDefaults
Since there is nothing specific to configuring pre/post annotations, there is no need for the extra class. If a need like this does arise in the future, either AnnotationTemplateExpressionDefaults can be sub- classed, or it can have introduced a Map field holding custom properties. Issue gh-15286
1 parent 3e5419d commit 9a93174

File tree

13 files changed

+173
-35
lines changed

13 files changed

+173
-35
lines changed

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import org.springframework.security.authorization.method.PreFilterAuthorizationMethodInterceptor;
5252
import org.springframework.security.authorization.method.PrePostTemplateDefaults;
5353
import org.springframework.security.config.core.GrantedAuthorityDefaults;
54+
import org.springframework.security.core.annotation.AnnotationTemplateExpressionDefaults;
5455
import org.springframework.security.core.context.SecurityContextHolderStrategy;
5556
import org.springframework.util.function.SingletonSupplier;
5657

@@ -72,6 +73,7 @@ final class PrePostMethodSecurityConfiguration implements ImportAware, AopInfras
7273
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
7374
static MethodInterceptor preFilterAuthorizationMethodInterceptor(
7475
ObjectProvider<GrantedAuthorityDefaults> defaultsProvider,
76+
ObjectProvider<AnnotationTemplateExpressionDefaults> templateExpressionDefaultsProvider,
7577
ObjectProvider<PrePostTemplateDefaults> methodSecurityDefaultsProvider,
7678
ObjectProvider<MethodSecurityExpressionHandler> expressionHandlerProvider,
7779
ObjectProvider<SecurityContextHolderStrategy> strategyProvider,
@@ -80,6 +82,7 @@ static MethodInterceptor preFilterAuthorizationMethodInterceptor(
8082
PreFilterAuthorizationMethodInterceptor preFilter = new PreFilterAuthorizationMethodInterceptor();
8183
preFilter.setOrder(preFilter.getOrder() + configuration.interceptorOrderOffset);
8284
return new DeferringMethodInterceptor<>(preFilter, (f) -> {
85+
templateExpressionDefaultsProvider.ifAvailable(f::setTemplateDefaults);
8386
methodSecurityDefaultsProvider.ifAvailable(f::setTemplateDefaults);
8487
f.setExpressionHandler(expressionHandlerProvider
8588
.getIfAvailable(() -> defaultExpressionHandler(defaultsProvider, roleHierarchyProvider, context)));
@@ -91,6 +94,7 @@ static MethodInterceptor preFilterAuthorizationMethodInterceptor(
9194
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
9295
static MethodInterceptor preAuthorizeAuthorizationMethodInterceptor(
9396
ObjectProvider<GrantedAuthorityDefaults> defaultsProvider,
97+
ObjectProvider<AnnotationTemplateExpressionDefaults> templateExpressionDefaultsProvider,
9498
ObjectProvider<PrePostTemplateDefaults> methodSecurityDefaultsProvider,
9599
ObjectProvider<MethodSecurityExpressionHandler> expressionHandlerProvider,
96100
ObjectProvider<SecurityContextHolderStrategy> strategyProvider,
@@ -103,6 +107,7 @@ static MethodInterceptor preAuthorizeAuthorizationMethodInterceptor(
103107
.preAuthorize(manager(manager, registryProvider));
104108
preAuthorize.setOrder(preAuthorize.getOrder() + configuration.interceptorOrderOffset);
105109
return new DeferringMethodInterceptor<>(preAuthorize, (f) -> {
110+
templateExpressionDefaultsProvider.ifAvailable(manager::setTemplateDefaults);
106111
methodSecurityDefaultsProvider.ifAvailable(manager::setTemplateDefaults);
107112
manager.setExpressionHandler(expressionHandlerProvider
108113
.getIfAvailable(() -> defaultExpressionHandler(defaultsProvider, roleHierarchyProvider, context)));
@@ -115,6 +120,7 @@ static MethodInterceptor preAuthorizeAuthorizationMethodInterceptor(
115120
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
116121
static MethodInterceptor postAuthorizeAuthorizationMethodInterceptor(
117122
ObjectProvider<GrantedAuthorityDefaults> defaultsProvider,
123+
ObjectProvider<AnnotationTemplateExpressionDefaults> templateExpressionDefaultsProvider,
118124
ObjectProvider<PrePostTemplateDefaults> methodSecurityDefaultsProvider,
119125
ObjectProvider<MethodSecurityExpressionHandler> expressionHandlerProvider,
120126
ObjectProvider<SecurityContextHolderStrategy> strategyProvider,
@@ -127,6 +133,7 @@ static MethodInterceptor postAuthorizeAuthorizationMethodInterceptor(
127133
.postAuthorize(manager(manager, registryProvider));
128134
postAuthorize.setOrder(postAuthorize.getOrder() + configuration.interceptorOrderOffset);
129135
return new DeferringMethodInterceptor<>(postAuthorize, (f) -> {
136+
templateExpressionDefaultsProvider.ifAvailable(manager::setTemplateDefaults);
130137
methodSecurityDefaultsProvider.ifAvailable(manager::setTemplateDefaults);
131138
manager.setExpressionHandler(expressionHandlerProvider
132139
.getIfAvailable(() -> defaultExpressionHandler(defaultsProvider, roleHierarchyProvider, context)));
@@ -139,6 +146,7 @@ static MethodInterceptor postAuthorizeAuthorizationMethodInterceptor(
139146
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
140147
static MethodInterceptor postFilterAuthorizationMethodInterceptor(
141148
ObjectProvider<GrantedAuthorityDefaults> defaultsProvider,
149+
ObjectProvider<AnnotationTemplateExpressionDefaults> templateExpressionDefaultsProvider,
142150
ObjectProvider<PrePostTemplateDefaults> methodSecurityDefaultsProvider,
143151
ObjectProvider<MethodSecurityExpressionHandler> expressionHandlerProvider,
144152
ObjectProvider<SecurityContextHolderStrategy> strategyProvider,
@@ -147,6 +155,7 @@ static MethodInterceptor postFilterAuthorizationMethodInterceptor(
147155
PostFilterAuthorizationMethodInterceptor postFilter = new PostFilterAuthorizationMethodInterceptor();
148156
postFilter.setOrder(postFilter.getOrder() + configuration.interceptorOrderOffset);
149157
return new DeferringMethodInterceptor<>(postFilter, (f) -> {
158+
templateExpressionDefaultsProvider.ifAvailable(f::setTemplateDefaults);
150159
methodSecurityDefaultsProvider.ifAvailable(f::setTemplateDefaults);
151160
f.setExpressionHandler(expressionHandlerProvider
152161
.getIfAvailable(() -> defaultExpressionHandler(defaultsProvider, roleHierarchyProvider, context)));

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

Lines changed: 53 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
import org.aopalliance.intercept.MethodInvocation;
3333
import org.junit.jupiter.api.Test;
3434
import org.junit.jupiter.api.extension.ExtendWith;
35+
import org.junit.jupiter.params.ParameterizedTest;
36+
import org.junit.jupiter.params.provider.ValueSource;
3537

3638
import org.springframework.aop.Advisor;
3739
import org.springframework.aop.support.DefaultPointcutAdvisor;
@@ -76,6 +78,7 @@
7678
import org.springframework.security.config.test.SpringTestContextExtension;
7779
import org.springframework.security.config.test.SpringTestParentApplicationContextExecutionListener;
7880
import org.springframework.security.core.Authentication;
81+
import org.springframework.security.core.annotation.AnnotationTemplateExpressionDefaults;
7982
import org.springframework.security.core.context.SecurityContextHolderStrategy;
8083
import org.springframework.security.test.context.support.WithAnonymousUser;
8184
import org.springframework.security.test.context.support.WithMockUser;
@@ -605,69 +608,77 @@ public void allAnnotationsWhenAdviceAfterAllOffsetThenReturnsFilteredList() {
605608
assertThat(filtered).containsExactly("DoNotDrop");
606609
}
607610

608-
@Test
611+
@ParameterizedTest
612+
@ValueSource(classes = { LegacyMetaAnnotationPlaceholderConfig.class, MetaAnnotationPlaceholderConfig.class })
609613
@WithMockUser
610-
public void methodeWhenParameterizedPreAuthorizeMetaAnnotationThenPasses() {
611-
this.spring.register(MetaAnnotationPlaceholderConfig.class).autowire();
614+
public void methodeWhenParameterizedPreAuthorizeMetaAnnotationThenPasses(Class<?> config) {
615+
this.spring.register(config).autowire();
612616
MetaAnnotationService service = this.spring.getContext().getBean(MetaAnnotationService.class);
613617
assertThat(service.hasRole("USER")).isTrue();
614618
}
615619

616-
@Test
620+
@ParameterizedTest
621+
@ValueSource(classes = { LegacyMetaAnnotationPlaceholderConfig.class, MetaAnnotationPlaceholderConfig.class })
617622
@WithMockUser
618-
public void methodRoleWhenPreAuthorizeMetaAnnotationHardcodedParameterThenPasses() {
619-
this.spring.register(MetaAnnotationPlaceholderConfig.class).autowire();
623+
public void methodRoleWhenPreAuthorizeMetaAnnotationHardcodedParameterThenPasses(Class<?> config) {
624+
this.spring.register(config).autowire();
620625
MetaAnnotationService service = this.spring.getContext().getBean(MetaAnnotationService.class);
621626
assertThat(service.hasUserRole()).isTrue();
622627
}
623628

624-
@Test
625-
public void methodWhenParameterizedAnnotationThenFails() {
626-
this.spring.register(MetaAnnotationPlaceholderConfig.class).autowire();
629+
@ParameterizedTest
630+
@ValueSource(classes = { LegacyMetaAnnotationPlaceholderConfig.class, MetaAnnotationPlaceholderConfig.class })
631+
public void methodWhenParameterizedAnnotationThenFails(Class<?> config) {
632+
this.spring.register(config).autowire();
627633
MetaAnnotationService service = this.spring.getContext().getBean(MetaAnnotationService.class);
628634
assertThatExceptionOfType(IllegalArgumentException.class)
629635
.isThrownBy(service::placeholdersOnlyResolvedByMetaAnnotations);
630636
}
631637

632-
@Test
638+
@ParameterizedTest
639+
@ValueSource(classes = { LegacyMetaAnnotationPlaceholderConfig.class, MetaAnnotationPlaceholderConfig.class })
633640
@WithMockUser(authorities = "SCOPE_message:read")
634-
public void methodWhenMultiplePlaceholdersHasAuthorityThenPasses() {
635-
this.spring.register(MetaAnnotationPlaceholderConfig.class).autowire();
641+
public void methodWhenMultiplePlaceholdersHasAuthorityThenPasses(Class<?> config) {
642+
this.spring.register(config).autowire();
636643
MetaAnnotationService service = this.spring.getContext().getBean(MetaAnnotationService.class);
637644
assertThat(service.readMessage()).isEqualTo("message");
638645
}
639646

640-
@Test
647+
@ParameterizedTest
648+
@ValueSource(classes = { LegacyMetaAnnotationPlaceholderConfig.class, MetaAnnotationPlaceholderConfig.class })
641649
@WithMockUser(roles = "ADMIN")
642-
public void methodWhenMultiplePlaceholdersHasRoleThenPasses() {
643-
this.spring.register(MetaAnnotationPlaceholderConfig.class).autowire();
650+
public void methodWhenMultiplePlaceholdersHasRoleThenPasses(Class<?> config) {
651+
this.spring.register(config).autowire();
644652
MetaAnnotationService service = this.spring.getContext().getBean(MetaAnnotationService.class);
645653
assertThat(service.readMessage()).isEqualTo("message");
646654
}
647655

648-
@Test
656+
@ParameterizedTest
657+
@ValueSource(classes = { LegacyMetaAnnotationPlaceholderConfig.class, MetaAnnotationPlaceholderConfig.class })
649658
@WithMockUser
650-
public void methodWhenPostAuthorizeMetaAnnotationThenAuthorizes() {
651-
this.spring.register(MetaAnnotationPlaceholderConfig.class).autowire();
659+
public void methodWhenPostAuthorizeMetaAnnotationThenAuthorizes(Class<?> config) {
660+
this.spring.register(config).autowire();
652661
MetaAnnotationService service = this.spring.getContext().getBean(MetaAnnotationService.class);
653662
service.startsWithDave("daveMatthews");
654663
assertThatExceptionOfType(AccessDeniedException.class)
655664
.isThrownBy(() -> service.startsWithDave("jenniferHarper"));
656665
}
657666

658-
@Test
667+
@ParameterizedTest
668+
@ValueSource(classes = { LegacyMetaAnnotationPlaceholderConfig.class, MetaAnnotationPlaceholderConfig.class })
659669
@WithMockUser
660-
public void methodWhenPreFilterMetaAnnotationThenFilters() {
661-
this.spring.register(MetaAnnotationPlaceholderConfig.class).autowire();
670+
public void methodWhenPreFilterMetaAnnotationThenFilters(Class<?> config) {
671+
this.spring.register(config).autowire();
662672
MetaAnnotationService service = this.spring.getContext().getBean(MetaAnnotationService.class);
663673
assertThat(service.parametersContainDave(new ArrayList<>(List.of("dave", "carla", "vanessa", "paul"))))
664674
.containsExactly("dave");
665675
}
666676

667-
@Test
677+
@ParameterizedTest
678+
@ValueSource(classes = { LegacyMetaAnnotationPlaceholderConfig.class, MetaAnnotationPlaceholderConfig.class })
668679
@WithMockUser
669-
public void methodWhenPostFilterMetaAnnotationThenFilters() {
670-
this.spring.register(MetaAnnotationPlaceholderConfig.class).autowire();
680+
public void methodWhenPostFilterMetaAnnotationThenFilters(Class<?> config) {
681+
this.spring.register(config).autowire();
671682
MetaAnnotationService service = this.spring.getContext().getBean(MetaAnnotationService.class);
672683
assertThat(service.resultsContainDave(new ArrayList<>(List.of("dave", "carla", "vanessa", "paul"))))
673684
.containsExactly("dave");
@@ -825,7 +836,7 @@ void preAuthorizeWhenDeniedAndHandlerWithCustomAnnotationInClassThenHandlerCanUs
825836
@WithMockUser
826837
void postAuthorizeWhenNullDeniedMetaAnnotationThanWorks() {
827838
this.spring
828-
.register(MethodSecurityServiceEnabledConfig.class, MetaAnnotationPlaceholderConfig.class,
839+
.register(MethodSecurityServiceEnabledConfig.class, LegacyMetaAnnotationPlaceholderConfig.class,
829840
MethodSecurityService.NullPostProcessor.class)
830841
.autowire();
831842
MethodSecurityService service = this.spring.getContext().getBean(MethodSecurityService.class);
@@ -1259,7 +1270,7 @@ Authz authz() {
12591270

12601271
@Configuration
12611272
@EnableMethodSecurity
1262-
static class MetaAnnotationPlaceholderConfig {
1273+
static class LegacyMetaAnnotationPlaceholderConfig {
12631274

12641275
@Bean
12651276
PrePostTemplateDefaults methodSecurityDefaults() {
@@ -1273,6 +1284,22 @@ MetaAnnotationService metaAnnotationService() {
12731284

12741285
}
12751286

1287+
@Configuration
1288+
@EnableMethodSecurity
1289+
static class MetaAnnotationPlaceholderConfig {
1290+
1291+
@Bean
1292+
AnnotationTemplateExpressionDefaults methodSecurityDefaults() {
1293+
return new AnnotationTemplateExpressionDefaults();
1294+
}
1295+
1296+
@Bean
1297+
MetaAnnotationService metaAnnotationService() {
1298+
return new MetaAnnotationService();
1299+
}
1300+
1301+
}
1302+
12761303
static class MetaAnnotationService {
12771304

12781305
@RequireRole(role = "#role")

core/src/main/java/org/springframework/security/authorization/method/AbstractExpressionAttributeRegistry.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.springframework.lang.NonNull;
2727
import org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler;
2828
import org.springframework.security.access.expression.method.MethodSecurityExpressionHandler;
29+
import org.springframework.security.core.annotation.AnnotationTemplateExpressionDefaults;
2930
import org.springframework.util.Assert;
3031

3132
/**
@@ -76,6 +77,15 @@ void setExpressionHandler(MethodSecurityExpressionHandler expressionHandler) {
7677
this.expressionHandler = expressionHandler;
7778
}
7879

80+
@Deprecated
81+
void setTemplateDefaults(PrePostTemplateDefaults defaults) {
82+
AnnotationTemplateExpressionDefaults adapter = new AnnotationTemplateExpressionDefaults();
83+
adapter.setIgnoreUnknown(defaults.isIgnoreUnknown());
84+
setTemplateDefaults(adapter);
85+
}
86+
87+
abstract void setTemplateDefaults(AnnotationTemplateExpressionDefaults adapter);
88+
7989
/**
8090
* Subclasses should implement this method to provide the non-null
8191
* {@link ExpressionAttribute} for the method and the target class.

core/src/main/java/org/springframework/security/authorization/method/PostAuthorizeAuthorizationManager.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.springframework.security.authorization.AuthorizationManager;
2929
import org.springframework.security.authorization.AuthorizationResult;
3030
import org.springframework.security.core.Authentication;
31+
import org.springframework.security.core.annotation.AnnotationTemplateExpressionDefaults;
3132

3233
/**
3334
* An {@link AuthorizationManager} which can determine if an {@link Authentication} may
@@ -57,11 +58,26 @@ public void setExpressionHandler(MethodSecurityExpressionHandler expressionHandl
5758
* not be resolved.
5859
* @param defaults - whether to resolve pre/post-authorization templates parameters
5960
* @since 6.3
61+
* @deprecated Please use
62+
* {@link #setTemplateDefaults(AnnotationTemplateExpressionDefaults)} instead
6063
*/
64+
@Deprecated
6165
public void setTemplateDefaults(PrePostTemplateDefaults defaults) {
6266
this.registry.setTemplateDefaults(defaults);
6367
}
6468

69+
/**
70+
* Configure pre/post-authorization template resolution
71+
* <p>
72+
* By default, this value is <code>null</code>, which indicates that templates should
73+
* not be resolved.
74+
* @param defaults - whether to resolve pre/post-authorization templates parameters
75+
* @since 6.4
76+
*/
77+
public void setTemplateDefaults(AnnotationTemplateExpressionDefaults defaults) {
78+
this.registry.setTemplateDefaults(defaults);
79+
}
80+
6581
/**
6682
* Invokes
6783
* {@link PostAuthorizeExpressionAttributeRegistry#setApplicationContext(ApplicationContext)}

core/src/main/java/org/springframework/security/authorization/method/PostAuthorizeExpressionAttributeRegistry.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.springframework.security.access.prepost.PostAuthorize;
2929
import org.springframework.security.core.annotation.AnnotationSynthesizer;
3030
import org.springframework.security.core.annotation.AnnotationSynthesizers;
31+
import org.springframework.security.core.annotation.AnnotationTemplateExpressionDefaults;
3132
import org.springframework.util.Assert;
3233

3334
/**
@@ -91,7 +92,7 @@ void setApplicationContext(ApplicationContext context) {
9192
this.handlerResolver = (clazz) -> resolveHandler(context, clazz);
9293
}
9394

94-
void setTemplateDefaults(PrePostTemplateDefaults templateDefaults) {
95+
void setTemplateDefaults(AnnotationTemplateExpressionDefaults templateDefaults) {
9596
this.postAuthorizeSynthesizer = AnnotationSynthesizers.requireUnique(PostAuthorize.class, templateDefaults);
9697
}
9798

core/src/main/java/org/springframework/security/authorization/method/PostFilterAuthorizationMethodInterceptor.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.springframework.security.access.prepost.PostFilter;
2929
import org.springframework.security.authentication.AuthenticationCredentialsNotFoundException;
3030
import org.springframework.security.core.Authentication;
31+
import org.springframework.security.core.annotation.AnnotationTemplateExpressionDefaults;
3132
import org.springframework.security.core.context.SecurityContextHolder;
3233
import org.springframework.security.core.context.SecurityContextHolderStrategy;
3334

@@ -73,11 +74,25 @@ public void setExpressionHandler(MethodSecurityExpressionHandler expressionHandl
7374
* not be resolved.
7475
* @param defaults - whether to resolve pre/post-authorization templates parameters
7576
* @since 6.3
77+
* @deprecated Please use {@link AnnotationTemplateExpressionDefaults} instead
7678
*/
79+
@Deprecated
7780
public void setTemplateDefaults(PrePostTemplateDefaults defaults) {
7881
this.registry.setTemplateDefaults(defaults);
7982
}
8083

84+
/**
85+
* Configure pre/post-authorization template resolution
86+
* <p>
87+
* By default, this value is <code>null</code>, which indicates that templates should
88+
* not be resolved.
89+
* @param defaults - whether to resolve pre/post-authorization templates parameters
90+
* @since 6.4
91+
*/
92+
public void setTemplateDefaults(AnnotationTemplateExpressionDefaults defaults) {
93+
this.registry.setTemplateDefaults(defaults);
94+
}
95+
8196
/**
8297
* {@inheritDoc}
8398
*/

core/src/main/java/org/springframework/security/authorization/method/PostFilterExpressionAttributeRegistry.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.springframework.security.access.prepost.PostFilter;
2525
import org.springframework.security.core.annotation.AnnotationSynthesizer;
2626
import org.springframework.security.core.annotation.AnnotationSynthesizers;
27+
import org.springframework.security.core.annotation.AnnotationTemplateExpressionDefaults;
2728

2829
/**
2930
* For internal use only, as this contract is likely to change.
@@ -49,7 +50,7 @@ ExpressionAttribute resolveAttribute(Method method, Class<?> targetClass) {
4950
return new ExpressionAttribute(postFilterExpression);
5051
}
5152

52-
void setTemplateDefaults(PrePostTemplateDefaults defaults) {
53+
void setTemplateDefaults(AnnotationTemplateExpressionDefaults defaults) {
5354
this.synthesizer = AnnotationSynthesizers.requireUnique(PostFilter.class, defaults);
5455
}
5556

core/src/main/java/org/springframework/security/authorization/method/PreAuthorizeAuthorizationManager.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.springframework.security.authorization.AuthorizationManager;
2929
import org.springframework.security.authorization.AuthorizationResult;
3030
import org.springframework.security.core.Authentication;
31+
import org.springframework.security.core.annotation.AnnotationTemplateExpressionDefaults;
3132

3233
/**
3334
* An {@link AuthorizationManager} which can determine if an {@link Authentication} may
@@ -57,11 +58,26 @@ public void setExpressionHandler(MethodSecurityExpressionHandler expressionHandl
5758
* not be resolved.
5859
* @param defaults - whether to resolve pre/post-authorization templates parameters
5960
* @since 6.3
61+
* @deprecated Please use
62+
* {@link #setTemplateDefaults(AnnotationTemplateExpressionDefaults)} instead
6063
*/
64+
@Deprecated
6165
public void setTemplateDefaults(PrePostTemplateDefaults defaults) {
6266
this.registry.setTemplateDefaults(defaults);
6367
}
6468

69+
/**
70+
* Configure pre/post-authorization template resolution
71+
* <p>
72+
* By default, this value is <code>null</code>, which indicates that templates should
73+
* not be resolved.
74+
* @param defaults - whether to resolve pre/post-authorization templates parameters
75+
* @since 6.4
76+
*/
77+
public void setTemplateDefaults(AnnotationTemplateExpressionDefaults defaults) {
78+
this.registry.setTemplateDefaults(defaults);
79+
}
80+
6581
public void setApplicationContext(ApplicationContext context) {
6682
this.registry.setApplicationContext(context);
6783
}

0 commit comments

Comments
 (0)