-
Notifications
You must be signed in to change notification settings - Fork 6.1k
Description
Describe the bug
DefaultMethodSecurityExpressionHandler for v5.8.0 adds a new signature for createSecurityExpressionRoot
as createSecurityExpressionRoot(Supplier<Authentication> authentication, MethodInvocation invocation)
in addition to the existing
createSecurityExpressionRoot(Authentication authentication, MethodInvocation invocation)
. However, the new signature is private
while the existing one is protected
. This causes an issue for any usage that extends the DefaultMethodSecurityExpressionHandler
and overrides the protected createSecurityExpressionRoot
because the createEvaluationContext
method always calls the private createSecurityExpressionRoot
, leaving any extension of DefaultMethodSecurityExpressionHandler
unable to override this behavior. A work around could be to also override createEvaluationContext
however that method uses MethodSecurityEvaluationContext
which is package private and therefore cannot be used when overriding createEvaluationContext
.
Proposed Fix
Make MethodSecurityExpressionOperations createSecurityExpressionRoot(Supplier<Authentication> authentication, MethodInvocation invocation)
protected instead of private
Sample
See - DefaultMethodSecurityExpressionHandler for the code in question