Skip to content

Commit 60e3bf4

Browse files
miborwinch
authored andcommitted
Add Anonymous Support to AuthenticatedReactiveAuthorizationManager
Fixes: gh-6235
1 parent 1706a5c commit 60e3bf4

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

core/src/main/java/org/springframework/security/authorization/AuthenticatedReactiveAuthorizationManager.java

+14
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package org.springframework.security.authorization;
1818

19+
import org.springframework.security.authentication.AuthenticationTrustResolver;
20+
import org.springframework.security.authentication.AuthenticationTrustResolverImpl;
1921
import org.springframework.security.core.Authentication;
2022
import reactor.core.publisher.Mono;
2123

@@ -30,13 +32,25 @@
3032
*/
3133
public class AuthenticatedReactiveAuthorizationManager<T> implements ReactiveAuthorizationManager<T> {
3234

35+
private AuthenticationTrustResolver authTrustResolver = new AuthenticationTrustResolverImpl();
36+
3337
@Override
3438
public Mono<AuthorizationDecision> check(Mono<Authentication> authentication, T object) {
3539
return authentication
40+
.filter(this::isNotAnonymous)
3641
.map(a -> new AuthorizationDecision(a.isAuthenticated()))
3742
.defaultIfEmpty(new AuthorizationDecision(false));
3843
}
3944

45+
/**
46+
* Verify (via {@link AuthenticationTrustResolver}) that the given authentication is not anonymous.
47+
* @param authentication to be checked
48+
* @return <code>true</code> if not anonymous, otherwise <code>false</code>.
49+
*/
50+
private boolean isNotAnonymous(Authentication authentication) {
51+
return !authTrustResolver.isAnonymous(authentication);
52+
}
53+
4054
/**
4155
* Gets an instance of {@link AuthenticatedReactiveAuthorizationManager}
4256
* @param <T>

core/src/test/java/org/springframework/security/authorization/AuthenticatedReactiveAuthorizationManagerTests.java

+10
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,13 @@
2020
import org.junit.runner.RunWith;
2121
import org.mockito.Mock;
2222
import org.mockito.junit.MockitoJUnitRunner;
23+
import org.springframework.security.authentication.AnonymousAuthenticationToken;
2324
import org.springframework.security.core.Authentication;
2425
import reactor.core.publisher.Mono;
2526
import reactor.test.StepVerifier;
2627

2728
import static org.assertj.core.api.Assertions.assertThat;
29+
import static org.mockito.Mockito.mock;
2830
import static org.mockito.Mockito.when;
2931

3032
/**
@@ -62,6 +64,14 @@ public void checkWhenEmptyThenReturnFalse() {
6264
assertThat(granted).isFalse();
6365
}
6466

67+
@Test
68+
public void checkWhenAnonymousAuthenticatedThenReturnFalse() {
69+
AnonymousAuthenticationToken anonymousAuthenticationToken = mock(AnonymousAuthenticationToken.class);
70+
71+
boolean granted = manager.check(Mono.just(anonymousAuthenticationToken), null).block().isGranted();
72+
73+
assertThat(granted).isFalse();
74+
}
6575

6676
@Test
6777
public void checkWhenErrorThenError() {

0 commit comments

Comments
 (0)