Skip to content

Commit b6f8e46

Browse files
committed
Allow null object for AuthorizationManagerFactory
Signed-off-by: Steve Riesenberg <[email protected]>
1 parent bc513ce commit b6f8e46

File tree

7 files changed

+22
-15
lines changed

7 files changed

+22
-15
lines changed

core/src/main/java/org/springframework/security/access/expression/SecurityExpressionRoot.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,13 @@
4040
* @author Steve Riesenberg
4141
* @since 3.0
4242
*/
43-
public abstract class SecurityExpressionRoot<T> implements SecurityExpressionOperations {
43+
public abstract class SecurityExpressionRoot<T extends @Nullable Object> implements SecurityExpressionOperations {
4444

4545
private static final AuthorizationManagerFactory<?> DEFAULT_AUTHORIZATION_MANAGER_FACTORY = new DefaultAuthorizationManagerFactory<>();
4646

4747
private final Supplier<Authentication> authentication;
4848

49-
private final @Nullable T object;
49+
private final T object;
5050

5151
private @Nullable DefaultAuthorizationManagerFactory<T> defaultAuthorizationManagerFactory;
5252

@@ -94,12 +94,7 @@ public SecurityExpressionRoot(Authentication authentication) {
9494
*/
9595
@Deprecated(since = "7.0")
9696
public SecurityExpressionRoot(Supplier<Authentication> authentication) {
97-
this.authentication = SingletonSupplier.of(() -> {
98-
Authentication value = authentication.get();
99-
Assert.notNull(value, "Authentication object cannot be null");
100-
return value;
101-
});
102-
this.object = null;
97+
this(authentication, null);
10398
}
10499

105100
/**
@@ -174,7 +169,6 @@ public final boolean isFullyAuthenticated() {
174169
return isGranted(this.authorizationManagerFactory.fullyAuthenticated());
175170
}
176171

177-
@SuppressWarnings("DataFlowIssue")
178172
private boolean isGranted(AuthorizationManager<T> authorizationManager) {
179173
AuthorizationResult authorizationResult = authorizationManager.authorize(this.authentication, this.object);
180174
return (authorizationResult != null && authorizationResult.isGranted());

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
import java.util.function.Supplier;
2020

21+
import org.jspecify.annotations.Nullable;
22+
2123
import org.springframework.security.authentication.AuthenticationTrustResolver;
2224
import org.springframework.security.authentication.AuthenticationTrustResolverImpl;
2325
import org.springframework.security.core.Authentication;
@@ -30,7 +32,7 @@
3032
* @author Evgeniy Cheban
3133
* @since 5.5
3234
*/
33-
public final class AuthenticatedAuthorizationManager<T> implements AuthorizationManager<T> {
35+
public final class AuthenticatedAuthorizationManager<T extends @Nullable Object> implements AuthorizationManager<T> {
3436

3537
private final AbstractAuthorizationStrategy authorizationStrategy;
3638

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import java.util.Set;
2020
import java.util.function.Supplier;
2121

22+
import org.jspecify.annotations.Nullable;
23+
2224
import org.springframework.security.access.hierarchicalroles.NullRoleHierarchy;
2325
import org.springframework.security.access.hierarchicalroles.RoleHierarchy;
2426
import org.springframework.security.core.Authentication;
@@ -32,7 +34,7 @@
3234
* @author Evgeniy Cheban
3335
* @since 5.5
3436
*/
35-
public final class AuthorityAuthorizationManager<T> implements AuthorizationManager<T> {
37+
public final class AuthorityAuthorizationManager<T extends @Nullable Object> implements AuthorizationManager<T> {
3638

3739
private static final String ROLE_PREFIX = "ROLE_";
3840

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import java.util.function.Supplier;
2020

21+
import org.jspecify.annotations.NullUnmarked;
2122
import org.jspecify.annotations.Nullable;
2223

2324
import org.springframework.security.access.AccessDeniedException;
@@ -30,8 +31,9 @@
3031
* @param <T> the type of object that the authorization check is being done on.
3132
* @author Evgeniy Cheban
3233
*/
34+
@NullUnmarked
3335
@FunctionalInterface
34-
public interface AuthorizationManager<@Nullable T> {
36+
public interface AuthorizationManager<T> {
3537

3638
/**
3739
* Determines if access should be granted for a specific authentication and object.

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,16 @@
1616

1717
package org.springframework.security.authorization;
1818

19+
import org.jspecify.annotations.Nullable;
20+
1921
/**
2022
* A factory for creating different kinds of {@link AuthorizationManager} instances.
2123
*
2224
* @param <T> the type of object that the authorization check is being done on
2325
* @author Steve Riesenberg
2426
* @since 7.0
2527
*/
26-
public interface AuthorizationManagerFactory<T> {
28+
public interface AuthorizationManagerFactory<T extends @Nullable Object> {
2729

2830
/**
2931
* Create an {@link AuthorizationManager} that allows anyone.

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package org.springframework.security.authorization;
1818

19+
import org.jspecify.annotations.Nullable;
20+
1921
import org.springframework.security.access.hierarchicalroles.NullRoleHierarchy;
2022
import org.springframework.security.access.hierarchicalroles.RoleHierarchy;
2123
import org.springframework.security.authentication.AuthenticationTrustResolver;
@@ -29,7 +31,8 @@
2931
* @author Steve Riesenberg
3032
* @since 7.0
3133
*/
32-
public final class DefaultAuthorizationManagerFactory<T> implements AuthorizationManagerFactory<T> {
34+
public final class DefaultAuthorizationManagerFactory<T extends @Nullable Object>
35+
implements AuthorizationManagerFactory<T> {
3336

3437
private AuthenticationTrustResolver trustResolver = new AuthenticationTrustResolverImpl();
3538

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
import java.util.function.Supplier;
2020

21+
import org.jspecify.annotations.Nullable;
22+
2123
import org.springframework.security.core.Authentication;
2224
import org.springframework.util.Assert;
2325

@@ -28,7 +30,7 @@
2830
* @author Max Batischev
2931
* @since 6.5
3032
*/
31-
public final class SingleResultAuthorizationManager<C> implements AuthorizationManager<C> {
33+
public final class SingleResultAuthorizationManager<C extends @Nullable Object> implements AuthorizationManager<C> {
3234

3335
private static final SingleResultAuthorizationManager<?> DENY_MANAGER = new SingleResultAuthorizationManager<>(
3436
new AuthorizationDecision(false));

0 commit comments

Comments
 (0)