3737 *
3838 * @author Luke Taylor
3939 * @author Evgeniy Cheban
40+ * @author Steve Riesenberg
4041 * @since 3.0
4142 */
42- public abstract class SecurityExpressionRoot implements SecurityExpressionOperations {
43+ public abstract class SecurityExpressionRoot < T > implements SecurityExpressionOperations {
4344
44- private static final AuthorizationManagerFactory <Object > DEFAULT_AUTHORIZATION_MANAGER_FACTORY = new DefaultAuthorizationManagerFactory <>();
45-
46- private static final Object DEFAULT_OBJECT = new Object ();
45+ private static final AuthorizationManagerFactory <?> DEFAULT_AUTHORIZATION_MANAGER_FACTORY = new DefaultAuthorizationManagerFactory <>();
4746
4847 private final Supplier <Authentication > authentication ;
4948
50- private final Object object ;
49+ private final @ Nullable T object ;
5150
52- private @ Nullable DefaultAuthorizationManagerFactory <Object > defaultAuthorizationManagerFactory ;
51+ private @ Nullable DefaultAuthorizationManagerFactory <T > defaultAuthorizationManagerFactory ;
5352
54- private AuthorizationManagerFactory <Object > authorizationManagerFactory = DEFAULT_AUTHORIZATION_MANAGER_FACTORY ;
53+ private AuthorizationManagerFactory <T > authorizationManagerFactory = defaultAuthorizationManagerFactory () ;
5554
5655 /**
5756 * Allows "permitAll" expression
@@ -82,7 +81,7 @@ public abstract class SecurityExpressionRoot implements SecurityExpressionOperat
8281 */
8382 @ Deprecated (since = "7.0" )
8483 public SecurityExpressionRoot (Authentication authentication ) {
85- this (() -> authentication , DEFAULT_OBJECT );
84+ this (() -> authentication );
8685 }
8786
8887 /**
@@ -95,7 +94,12 @@ public SecurityExpressionRoot(Authentication authentication) {
9594 */
9695 @ Deprecated (since = "7.0" )
9796 public SecurityExpressionRoot (Supplier <Authentication > authentication ) {
98- this (authentication , DEFAULT_OBJECT );
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 ;
99103 }
100104
101105 /**
@@ -106,7 +110,7 @@ public SecurityExpressionRoot(Supplier<Authentication> authentication) {
106110 * @param object the object being authorized
107111 * @since 7.0
108112 */
109- public SecurityExpressionRoot (Supplier <Authentication > authentication , Object object ) {
113+ public SecurityExpressionRoot (Supplier <Authentication > authentication , T object ) {
110114 this .authentication = SingletonSupplier .of (() -> {
111115 Authentication value = authentication .get ();
112116 Assert .notNull (value , "Authentication object cannot be null" );
@@ -170,7 +174,8 @@ public final boolean isFullyAuthenticated() {
170174 return isGranted (this .authorizationManagerFactory .fullyAuthenticated ());
171175 }
172176
173- private boolean isGranted (AuthorizationManager <Object > authorizationManager ) {
177+ @ SuppressWarnings ("DataFlowIssue" )
178+ private boolean isGranted (AuthorizationManager <T > authorizationManager ) {
174179 AuthorizationResult authorizationResult = authorizationManager .authorize (this .authentication , this .object );
175180 return (authorizationResult != null && authorizationResult .isGranted ());
176181 }
@@ -228,12 +233,12 @@ public void setDefaultRolePrefix(String defaultRolePrefix) {
228233 * @param authorizationManagerFactory the {@link AuthorizationManagerFactory} to use
229234 * @since 7.0
230235 */
231- public void setAuthorizationManagerFactory (AuthorizationManagerFactory <Object > authorizationManagerFactory ) {
236+ public void setAuthorizationManagerFactory (AuthorizationManagerFactory <T > authorizationManagerFactory ) {
232237 Assert .notNull (authorizationManagerFactory , "authorizationManagerFactory cannot be null" );
233238 this .authorizationManagerFactory = authorizationManagerFactory ;
234239 }
235240
236- private DefaultAuthorizationManagerFactory <Object > getDefaultAuthorizationManagerFactory () {
241+ private DefaultAuthorizationManagerFactory <T > getDefaultAuthorizationManagerFactory () {
237242 if (this .defaultAuthorizationManagerFactory == null ) {
238243 this .defaultAuthorizationManagerFactory = new DefaultAuthorizationManagerFactory <>();
239244 this .authorizationManagerFactory = this .defaultAuthorizationManagerFactory ;
@@ -258,4 +263,9 @@ public void setPermissionEvaluator(PermissionEvaluator permissionEvaluator) {
258263 this .permissionEvaluator = permissionEvaluator ;
259264 }
260265
266+ @ SuppressWarnings ("unchecked" )
267+ private static <T > AuthorizationManagerFactory <T > defaultAuthorizationManagerFactory () {
268+ return (AuthorizationManagerFactory <T >) DEFAULT_AUTHORIZATION_MANAGER_FACTORY ;
269+ }
270+
261271}
0 commit comments