Skip to content

Commit 06afe3a

Browse files
committed
Remove BeanResolver Null Checks
StandardEvaluationContext.setBeanResolver now accepts a nullable BeanResolver, so the workarounds added for the original limitation are no longer needed. This removes the explicit null guards (and equivalent Optional.ofNullable idiom) as well as the @SuppressWarnings("NullAway") annotations introduced to silence the false positives. In addition to the seven sites that explicitly referenced spring-projects/spring-framework#35371, two sites in spring-security-core followed the same workaround pattern without the comment marker (AbstractSecurityExpressionHandler and DefaultMethodSecurityExpressionHandler) and have also been simplified. Closes gh-17816 Signed-off-by: Kim Tae Eun <snowykte0426@naver.com>
1 parent 71fd234 commit 06afe3a

9 files changed

Lines changed: 6 additions & 26 deletions

File tree

core/src/main/java/org/springframework/security/access/expression/AbstractSecurityExpressionHandler.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,7 @@ public final void setExpressionParser(ExpressionParser expressionParser) {
7878
public final EvaluationContext createEvaluationContext(@Nullable Authentication authentication, T invocation) {
7979
SecurityExpressionOperations root = createSecurityExpressionRoot(authentication, invocation);
8080
StandardEvaluationContext ctx = createEvaluationContextInternal(authentication, invocation);
81-
if (this.beanResolver != null) {
82-
ctx.setBeanResolver(this.beanResolver);
83-
}
81+
ctx.setBeanResolver(this.beanResolver);
8482
ctx.setRootObject(root);
8583
return ctx;
8684
}

core/src/main/java/org/springframework/security/access/expression/method/DefaultMethodSecurityExpressionHandler.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import java.util.LinkedHashMap;
2424
import java.util.List;
2525
import java.util.Map;
26-
import java.util.Optional;
2726
import java.util.function.Supplier;
2827
import java.util.stream.Stream;
2928

@@ -95,7 +94,7 @@ public EvaluationContext createEvaluationContext(Supplier<? extends @Nullable Au
9594
MethodSecurityExpressionOperations root = createSecurityExpressionRoot(authentication, mi);
9695
MethodSecurityEvaluationContext ctx = new MethodSecurityEvaluationContext(root, mi,
9796
getParameterNameDiscoverer());
98-
Optional.ofNullable(getBeanResolver()).ifPresent(ctx::setBeanResolver);
97+
ctx.setBeanResolver(getBeanResolver());
9998
return ctx;
10099
}
101100

messaging/src/main/java/org/springframework/security/messaging/access/expression/DefaultMessageSecurityExpressionHandler.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020

2121
import org.jspecify.annotations.Nullable;
2222

23-
import org.springframework.expression.BeanResolver;
2423
import org.springframework.expression.EvaluationContext;
2524
import org.springframework.expression.spel.support.StandardEvaluationContext;
2625
import org.springframework.messaging.Message;
@@ -47,11 +46,7 @@ public EvaluationContext createEvaluationContext(Supplier<? extends @Nullable Au
4746
Message<T> message) {
4847
MessageSecurityExpressionRoot<T> root = createSecurityExpressionRoot(authentication, message);
4948
StandardEvaluationContext ctx = new StandardEvaluationContext(root);
50-
BeanResolver beanResolver = getBeanResolver();
51-
if (beanResolver != null) {
52-
// https://github.com/spring-projects/spring-framework/issues/35371
53-
ctx.setBeanResolver(beanResolver);
54-
}
49+
ctx.setBeanResolver(getBeanResolver());
5550
return ctx;
5651
}
5752

messaging/src/main/java/org/springframework/security/messaging/handler/invocation/reactive/CurrentSecurityContextArgumentResolver.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -175,10 +175,7 @@ public Mono<Object> resolveArgument(MethodParameter parameter, Message<?> messag
175175
StandardEvaluationContext context = new StandardEvaluationContext();
176176
context.setRootObject(securityContext);
177177
context.setVariable("this", securityContext);
178-
if (this.beanResolver != null) {
179-
// https://github.com/spring-projects/spring-framework/issues/35371
180-
context.setBeanResolver(this.beanResolver);
181-
}
178+
context.setBeanResolver(this.beanResolver);
182179
Expression expression = this.parser.parseExpression(expressionToParse);
183180
securityContext = expression.getValue(context);
184181
}

web/src/main/java/org/springframework/security/web/access/expression/DefaultHttpSecurityExpressionHandler.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ public class DefaultHttpSecurityExpressionHandler extends AbstractSecurityExpres
4848
private String defaultRolePrefix = DEFAULT_ROLE_PREFIX;
4949

5050
@Override
51-
@SuppressWarnings("NullAway") // https://github.com/spring-projects/spring-framework/issues/35371
5251
public EvaluationContext createEvaluationContext(Supplier<? extends @Nullable Authentication> authentication,
5352
RequestAuthorizationContext context) {
5453
WebSecurityExpressionRoot root = createSecurityExpressionRoot(authentication, context);

web/src/main/java/org/springframework/security/web/method/annotation/AuthenticationPrincipalArgumentResolver.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,7 @@ public final class AuthenticationPrincipalArgumentResolver implements HandlerMet
126126
StandardEvaluationContext context = new StandardEvaluationContext();
127127
context.setRootObject(principal);
128128
context.setVariable("this", principal);
129-
// https://github.com/spring-projects/spring-framework/issues/35371
130-
if (this.beanResolver != null) {
131-
context.setBeanResolver(this.beanResolver);
132-
}
129+
context.setBeanResolver(this.beanResolver);
133130
Expression expression = this.parser.parseExpression(expressionToParse);
134131
principal = expression.getValue(context);
135132
}

web/src/main/java/org/springframework/security/web/method/annotation/CurrentSecurityContextArgumentResolver.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -160,10 +160,7 @@ public void setTemplateDefaults(AnnotationTemplateExpressionDefaults templateDef
160160
StandardEvaluationContext context = new StandardEvaluationContext();
161161
context.setRootObject(securityContext);
162162
context.setVariable("this", securityContext);
163-
// https://github.com/spring-projects/spring-framework/issues/35371
164-
if (this.beanResolver != null) {
165-
context.setBeanResolver(this.beanResolver);
166-
}
163+
context.setBeanResolver(this.beanResolver);
167164
Expression expression = this.parser.parseExpression(expressionToParse);
168165
securityContextResult = expression.getValue(context);
169166
}

web/src/main/java/org/springframework/security/web/reactive/result/method/annotation/AuthenticationPrincipalArgumentResolver.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,6 @@ public Mono<Object> resolveArgument(MethodParameter parameter, BindingContext bi
9595
});
9696
}
9797

98-
@SuppressWarnings("NullAway") // https://github.com/spring-projects/spring-framework/issues/35371
9998
private @Nullable Object resolvePrincipal(MethodParameter parameter, @Nullable Object principal) {
10099
AuthenticationPrincipal annotation = findMethodAnnotation(parameter);
101100
if (annotation == null) {

web/src/main/java/org/springframework/security/web/reactive/result/method/annotation/CurrentSecurityContextArgumentResolver.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,6 @@ public Mono<Object> resolveArgument(MethodParameter parameter, BindingContext bi
141141
return securityContext;
142142
}
143143

144-
@SuppressWarnings("NullAway") // https://github.com/spring-projects/spring-framework/issues/35371
145144
private @Nullable Object resolveSecurityContextFromAnnotation(CurrentSecurityContext annotation,
146145
MethodParameter parameter, Object securityContext) {
147146
Object securityContextResult = securityContext;

0 commit comments

Comments
 (0)