1
0
mirror of synced 2026-08-31 22:46:02 +00:00

Merge branch '7.1.x'

This commit is contained in:
Josh Cummings
2026-08-11 19:41:02 -06:00
9 changed files with 6 additions and 27 deletions
@@ -78,9 +78,7 @@ public abstract class AbstractSecurityExpressionHandler<T>
public final EvaluationContext createEvaluationContext(@Nullable Authentication authentication, T invocation) { public final EvaluationContext createEvaluationContext(@Nullable Authentication authentication, T invocation) {
SecurityExpressionOperations root = createSecurityExpressionRoot(authentication, invocation); SecurityExpressionOperations root = createSecurityExpressionRoot(authentication, invocation);
StandardEvaluationContext ctx = createEvaluationContextInternal(authentication, invocation); StandardEvaluationContext ctx = createEvaluationContextInternal(authentication, invocation);
if (this.beanResolver != null) { ctx.setBeanResolver(this.beanResolver);
ctx.setBeanResolver(this.beanResolver);
}
ctx.setRootObject(root); ctx.setRootObject(root);
return ctx; return ctx;
} }
@@ -23,7 +23,6 @@ import java.util.Collection;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.stream.Stream; import java.util.stream.Stream;
@@ -89,13 +88,12 @@ public class DefaultMethodSecurityExpressionHandler extends AbstractSecurityExpr
} }
@Override @Override
@SuppressWarnings("NullAway") // FIXME: Dataflow analysis limitation
public EvaluationContext createEvaluationContext(Supplier<? extends @Nullable Authentication> authentication, public EvaluationContext createEvaluationContext(Supplier<? extends @Nullable Authentication> authentication,
MethodInvocation mi) { MethodInvocation mi) {
MethodSecurityExpressionOperations root = createSecurityExpressionRoot(authentication, mi); MethodSecurityExpressionOperations root = createSecurityExpressionRoot(authentication, mi);
MethodSecurityEvaluationContext ctx = new MethodSecurityEvaluationContext(root, mi, MethodSecurityEvaluationContext ctx = new MethodSecurityEvaluationContext(root, mi,
getParameterNameDiscoverer()); getParameterNameDiscoverer());
Optional.ofNullable(getBeanResolver()).ifPresent(ctx::setBeanResolver); ctx.setBeanResolver(getBeanResolver());
return ctx; return ctx;
} }
@@ -20,7 +20,6 @@ import java.util.function.Supplier;
import org.jspecify.annotations.Nullable; import org.jspecify.annotations.Nullable;
import org.springframework.expression.BeanResolver;
import org.springframework.expression.EvaluationContext; import org.springframework.expression.EvaluationContext;
import org.springframework.expression.spel.support.StandardEvaluationContext; import org.springframework.expression.spel.support.StandardEvaluationContext;
import org.springframework.messaging.Message; import org.springframework.messaging.Message;
@@ -47,11 +46,7 @@ public class DefaultMessageSecurityExpressionHandler<T> extends AbstractSecurity
Message<T> message) { Message<T> message) {
MessageSecurityExpressionRoot<T> root = createSecurityExpressionRoot(authentication, message); MessageSecurityExpressionRoot<T> root = createSecurityExpressionRoot(authentication, message);
StandardEvaluationContext ctx = new StandardEvaluationContext(root); StandardEvaluationContext ctx = new StandardEvaluationContext(root);
BeanResolver beanResolver = getBeanResolver(); ctx.setBeanResolver(getBeanResolver());
if (beanResolver != null) {
// https://github.com/spring-projects/spring-framework/issues/35371
ctx.setBeanResolver(beanResolver);
}
return ctx; return ctx;
} }
@@ -175,10 +175,7 @@ public class CurrentSecurityContextArgumentResolver implements HandlerMethodArgu
StandardEvaluationContext context = new StandardEvaluationContext(); StandardEvaluationContext context = new StandardEvaluationContext();
context.setRootObject(securityContext); context.setRootObject(securityContext);
context.setVariable("this", securityContext); context.setVariable("this", securityContext);
if (this.beanResolver != null) { context.setBeanResolver(this.beanResolver);
// https://github.com/spring-projects/spring-framework/issues/35371
context.setBeanResolver(this.beanResolver);
}
Expression expression = this.parser.parseExpression(expressionToParse); Expression expression = this.parser.parseExpression(expressionToParse);
securityContext = expression.getValue(context); securityContext = expression.getValue(context);
} }
@@ -48,7 +48,6 @@ public class DefaultHttpSecurityExpressionHandler extends AbstractSecurityExpres
private String defaultRolePrefix = DEFAULT_ROLE_PREFIX; private String defaultRolePrefix = DEFAULT_ROLE_PREFIX;
@Override @Override
@SuppressWarnings("NullAway") // https://github.com/spring-projects/spring-framework/issues/35371
public EvaluationContext createEvaluationContext(Supplier<? extends @Nullable Authentication> authentication, public EvaluationContext createEvaluationContext(Supplier<? extends @Nullable Authentication> authentication,
RequestAuthorizationContext context) { RequestAuthorizationContext context) {
WebSecurityExpressionRoot root = createSecurityExpressionRoot(authentication, context); WebSecurityExpressionRoot root = createSecurityExpressionRoot(authentication, context);
@@ -126,10 +126,7 @@ public final class AuthenticationPrincipalArgumentResolver implements HandlerMet
StandardEvaluationContext context = new StandardEvaluationContext(); StandardEvaluationContext context = new StandardEvaluationContext();
context.setRootObject(principal); context.setRootObject(principal);
context.setVariable("this", principal); context.setVariable("this", principal);
// https://github.com/spring-projects/spring-framework/issues/35371 context.setBeanResolver(this.beanResolver);
if (this.beanResolver != null) {
context.setBeanResolver(this.beanResolver);
}
Expression expression = this.parser.parseExpression(expressionToParse); Expression expression = this.parser.parseExpression(expressionToParse);
principal = expression.getValue(context); principal = expression.getValue(context);
} }
@@ -160,10 +160,7 @@ public final class CurrentSecurityContextArgumentResolver implements HandlerMeth
StandardEvaluationContext context = new StandardEvaluationContext(); StandardEvaluationContext context = new StandardEvaluationContext();
context.setRootObject(securityContext); context.setRootObject(securityContext);
context.setVariable("this", securityContext); context.setVariable("this", securityContext);
// https://github.com/spring-projects/spring-framework/issues/35371 context.setBeanResolver(this.beanResolver);
if (this.beanResolver != null) {
context.setBeanResolver(this.beanResolver);
}
Expression expression = this.parser.parseExpression(expressionToParse); Expression expression = this.parser.parseExpression(expressionToParse);
securityContextResult = expression.getValue(context); securityContextResult = expression.getValue(context);
} }
@@ -95,7 +95,6 @@ public class AuthenticationPrincipalArgumentResolver extends HandlerMethodArgume
}); });
} }
@SuppressWarnings("NullAway") // https://github.com/spring-projects/spring-framework/issues/35371
private @Nullable Object resolvePrincipal(MethodParameter parameter, @Nullable Object principal) { private @Nullable Object resolvePrincipal(MethodParameter parameter, @Nullable Object principal) {
AuthenticationPrincipal annotation = findMethodAnnotation(parameter); AuthenticationPrincipal annotation = findMethodAnnotation(parameter);
if (annotation == null) { if (annotation == null) {
@@ -141,7 +141,6 @@ public class CurrentSecurityContextArgumentResolver extends HandlerMethodArgumen
return securityContext; return securityContext;
} }
@SuppressWarnings("NullAway") // https://github.com/spring-projects/spring-framework/issues/35371
private @Nullable Object resolveSecurityContextFromAnnotation(CurrentSecurityContext annotation, private @Nullable Object resolveSecurityContextFromAnnotation(CurrentSecurityContext annotation,
MethodParameter parameter, Object securityContext) { MethodParameter parameter, Object securityContext) {
Object securityContextResult = securityContext; Object securityContextResult = securityContext;