Polish AuthorizationManager#authorize
Issue gh-14843
This commit is contained in:
@@ -221,9 +221,8 @@ public class DefaultFilterChainValidator implements FilterChainProxy.FilterChain
|
||||
AuthorizationManager<HttpServletRequest> authorizationManager = authorizationFilter
|
||||
.getAuthorizationManager();
|
||||
try {
|
||||
AuthorizationResult decision = authorizationManager.authorize(() -> TEST,
|
||||
loginRequest.getHttpRequest());
|
||||
return decision != null && decision.isGranted();
|
||||
AuthorizationResult result = authorizationManager.authorize(() -> TEST, loginRequest.getHttpRequest());
|
||||
return result != null && result.isGranted();
|
||||
}
|
||||
catch (Exception ex) {
|
||||
return false;
|
||||
@@ -253,9 +252,8 @@ public class DefaultFilterChainValidator implements FilterChainProxy.FilterChain
|
||||
return () -> {
|
||||
AuthorizationManager<HttpServletRequest> authorizationManager = authorizationFilter
|
||||
.getAuthorizationManager();
|
||||
AuthorizationResult decision = authorizationManager.authorize(() -> token,
|
||||
loginRequest.getHttpRequest());
|
||||
return decision != null && decision.isGranted();
|
||||
AuthorizationResult result = authorizationManager.authorize(() -> token, loginRequest.getHttpRequest());
|
||||
return result != null && result.isGranted();
|
||||
};
|
||||
}
|
||||
return () -> true;
|
||||
|
||||
@@ -25,6 +25,7 @@ import org.springframework.aop.Pointcut;
|
||||
import org.springframework.aop.support.AopUtils;
|
||||
import org.springframework.security.authorization.AuthorizationDecision;
|
||||
import org.springframework.security.authorization.AuthorizationManager;
|
||||
import org.springframework.security.authorization.AuthorizationResult;
|
||||
import org.springframework.security.core.Authentication;
|
||||
|
||||
class PointcutDelegatingAuthorizationManager implements AuthorizationManager<MethodInvocation> {
|
||||
@@ -37,11 +38,24 @@ class PointcutDelegatingAuthorizationManager implements AuthorizationManager<Met
|
||||
|
||||
@Override
|
||||
public AuthorizationDecision check(Supplier<Authentication> authentication, MethodInvocation object) {
|
||||
AuthorizationResult result = authorize(authentication, object);
|
||||
if (result == null) {
|
||||
return null;
|
||||
}
|
||||
if (result instanceof AuthorizationDecision decision) {
|
||||
return decision;
|
||||
}
|
||||
throw new IllegalArgumentException(
|
||||
"Please either call authorize or ensure that the returned result is of type AuthorizationDecision");
|
||||
}
|
||||
|
||||
@Override
|
||||
public AuthorizationResult authorize(Supplier<Authentication> authentication, MethodInvocation object) {
|
||||
for (Map.Entry<Pointcut, AuthorizationManager<MethodInvocation>> entry : this.managers.entrySet()) {
|
||||
Class<?> targetClass = (object.getThis() != null) ? AopUtils.getTargetClass(object.getThis()) : null;
|
||||
if (entry.getKey().getClassFilter().matches(targetClass)
|
||||
&& entry.getKey().getMethodMatcher().matches(object.getMethod(), targetClass)) {
|
||||
return entry.getValue().check(authentication, object);
|
||||
return entry.getValue().authorize(authentication, object);
|
||||
}
|
||||
}
|
||||
return new AuthorizationDecision(false);
|
||||
|
||||
@@ -168,6 +168,7 @@ public class InterceptMethodsBeanDefinitionDecoratorTests implements Application
|
||||
|
||||
@Test
|
||||
public void targetCustomAuthorizationManagerUsed() {
|
||||
given(this.mockAuthorizationManager.authorize(any(), any())).willCallRealMethod();
|
||||
given(this.mockAuthorizationManager.check(any(), any())).willReturn(new AuthorizationDecision(true));
|
||||
this.targetCustomAuthorizationManager.doSomething();
|
||||
verify(this.mockAuthorizationManager).check(any(), any());
|
||||
|
||||
Reference in New Issue
Block a user