Add MessageExpressionAuthorizationManager
Closes gh-12650 Signed-off-by: wonderfulrosemari <whwlsgur1419@naver.com>
This commit is contained in:
committed by
Josh Cummings
parent
b1f4deafe6
commit
07297e7a80
@@ -212,32 +212,10 @@ This will ensure that:
|
||||
If you are migrating from an older version of Spring Security, your destination matchers may include SpEL expressions.
|
||||
It's recommended that these be changed to using concrete implementations of `AuthorizationManager` since this is independently testable.
|
||||
|
||||
However, to ease migration, you can also use a class like the following:
|
||||
However, to ease migration, you can use
|
||||
`org.springframework.security.messaging.access.expression.MessageExpressionAuthorizationManager`.
|
||||
|
||||
[source,java]
|
||||
----
|
||||
public final class MessageExpressionAuthorizationManager implements AuthorizationManager<MessageAuthorizationContext<?>> {
|
||||
|
||||
private SecurityExpressionHandler<Message<?>> expressionHandler = new DefaultMessageSecurityExpressionHandler();
|
||||
|
||||
private Expression expression;
|
||||
|
||||
public MessageExpressionAuthorizationManager(String expressionString) {
|
||||
Assert.hasText(expressionString, "expressionString cannot be empty");
|
||||
this.expression = this.expressionHandler.getExpressionParser().parseExpression(expressionString);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthorizationResult authorize(Supplier<Authentication> authentication, MessageAuthorizationContext<?> context) {
|
||||
EvaluationContext ctx = this.expressionHandler.createEvaluationContext(authentication, context.getMessage());
|
||||
boolean granted = ExpressionUtils.evaluateAsBoolean(this.expression, ctx);
|
||||
return new ExpressionAuthorizationDecision(granted, this.expression);
|
||||
}
|
||||
|
||||
}
|
||||
----
|
||||
|
||||
And specify an instance for each matcher that you cannot get migrate:
|
||||
And specify an instance for each matcher that you cannot yet migrate:
|
||||
|
||||
[tabs]
|
||||
======
|
||||
@@ -252,7 +230,8 @@ public class WebSocketSecurityConfig {
|
||||
public AuthorizationManager<Message<?>> messageAuthorizationManager(MessageMatcherDelegatingAuthorizationManager.Builder messages) {
|
||||
messages
|
||||
// ...
|
||||
.simpSubscribeDestMatchers("/topic/friends/{friend}").access(new MessageExpressionAuthorizationManager("#friends == 'john"));
|
||||
.simpSubscribeDestMatchers("/topic/friends/{friend}")
|
||||
.access(new MessageExpressionAuthorizationManager("#friend == 'john'"));
|
||||
// ...
|
||||
|
||||
return messages.build();
|
||||
@@ -269,7 +248,8 @@ open class WebSocketSecurityConfig {
|
||||
fun messageAuthorizationManager(messages: MessageMatcherDelegatingAuthorizationManager.Builder): AuthorizationManager<Message<?> {
|
||||
messages
|
||||
// ..
|
||||
.simpSubscribeDestMatchers("/topic/friends/{friends}").access(MessageExpressionAuthorizationManager("#friends == 'john"))
|
||||
.simpSubscribeDestMatchers("/topic/friends/{friend}")
|
||||
.access(MessageExpressionAuthorizationManager("#friend == 'john'"))
|
||||
// ...
|
||||
|
||||
return messages.build()
|
||||
|
||||
Reference in New Issue
Block a user