Skip to content

Commit bea3b54

Browse files
committed
Constructor injection for BeanResolver
1 parent 0e89533 commit bea3b54

File tree

3 files changed

+9
-9
lines changed

3 files changed

+9
-9
lines changed

spring-graphql/src/main/java/org/springframework/graphql/data/method/annotation/support/AnnotatedControllerConfigurer.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.apache.commons.logging.LogFactory;
3838
import org.dataloader.DataLoader;
3939
import org.springframework.context.expression.BeanFactoryResolver;
40+
import org.springframework.expression.BeanResolver;
4041
import reactor.core.publisher.Flux;
4142
import reactor.core.publisher.Mono;
4243

@@ -151,9 +152,8 @@ public void afterPropertiesSet() {
151152
this.argumentResolvers.addResolver(new DataLoaderMethodArgumentResolver());
152153
if (springSecurityPresent) {
153154
this.argumentResolvers.addResolver(new PrincipalMethodArgumentResolver());
154-
AuthenticationPrincipalArgumentResolver authenticationPrincipalResolver = new AuthenticationPrincipalArgumentResolver();
155-
authenticationPrincipalResolver.setBeanResolver(new BeanFactoryResolver(obtainApplicationContext()));
156-
this.argumentResolvers.addResolver(authenticationPrincipalResolver);
155+
BeanResolver beanResolver = new BeanFactoryResolver(obtainApplicationContext());
156+
this.argumentResolvers.addResolver(new AuthenticationPrincipalArgumentResolver(beanResolver));
157157
}
158158
if (KotlinDetector.isKotlinPresent()) {
159159
this.argumentResolvers.addResolver(new ContinuationHandlerMethodArgumentResolver());

spring-graphql/src/main/java/org/springframework/graphql/data/method/annotation/support/AuthenticationPrincipalArgumentResolver.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.springframework.security.core.context.ReactiveSecurityContextHolder;
3232
import org.springframework.security.core.context.SecurityContext;
3333
import org.springframework.security.core.context.SecurityContextHolder;
34+
import org.springframework.util.Assert;
3435
import org.springframework.util.ClassUtils;
3536
import org.springframework.util.StringUtils;
3637
import reactor.core.publisher.Mono;
@@ -52,13 +53,14 @@ public class AuthenticationPrincipalArgumentResolver implements HandlerMethodArg
5253

5354
private ExpressionParser parser = new SpelExpressionParser();
5455

55-
private BeanResolver beanResolver;
56+
private final BeanResolver beanResolver;
5657

5758
/**
58-
* Sets the {@link BeanResolver} to be used on the expressions
59-
* @param beanResolver the {@link BeanResolver} to use
59+
* Creates a new instance.
60+
* @param beanResolver the {@link BeanResolver} used for resolving beans in SpEL expressions. Cannot be null.
6061
*/
61-
public void setBeanResolver(BeanResolver beanResolver) {
62+
public AuthenticationPrincipalArgumentResolver(BeanResolver beanResolver) {
63+
Assert.notNull(beanResolver, "BeanResolver is required");
6264
this.beanResolver = beanResolver;
6365
}
6466

spring-graphql/src/test/java/org/springframework/graphql/data/method/annotation/support/AuthenticationPrincipalArgumentResolverTests.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,6 @@ void resolveArgumentWhenAuthenticationPrincipalUsername() throws Exception {
137137

138138
@Test
139139
void resolveArgumentWhenBeanName() throws Exception {
140-
this.resolver.setBeanResolver((context, beanName) -> new PrincipalConverter());
141140
MethodParameter methodParameter = firstMethodParameter(UserController.class, "beanName", USER_DETAILS_CLASS);
142141
Mono<UserDetails> userDetails = (Mono<UserDetails>) this.resolver.resolveArgument(methodParameter, null);
143142
assertThat(userDetails.contextWrite(authenticationContext()).block().getUsername()).isEqualTo("user");
@@ -207,7 +206,6 @@ void resolveArgumentWhenMonoAuthenticationPrincipalUsername() throws Exception {
207206

208207
@Test
209208
void resolveArgumentWhenMonoBeanName() throws Exception {
210-
this.resolver.setBeanResolver((context, beanName) -> new PrincipalConverter());
211209
MethodParameter methodParameter = firstMethodParameter(UserController.class, "beanName", MONO_USER_DETAILS_CLASS);
212210
Mono<Mono<UserDetails>> userDetails = (Mono<Mono<UserDetails>>) this.resolver.resolveArgument(methodParameter, null);
213211
assertThat(userDetails.flatMap(u -> u).contextWrite(authenticationContext()).block().getUsername()).isEqualTo("user");

0 commit comments

Comments
 (0)