diff --git a/acl/src/main/java/org/springframework/security/acls/domain/BasePermission.java b/acl/src/main/java/org/springframework/security/acls/domain/BasePermission.java index 575b9f32c9..21611cb3ac 100644 --- a/acl/src/main/java/org/springframework/security/acls/domain/BasePermission.java +++ b/acl/src/main/java/org/springframework/security/acls/domain/BasePermission.java @@ -49,7 +49,7 @@ public class BasePermission extends AbstractPermission { super(mask, code); } - protected final static void registerPermissionsFor(Class subClass) { + protected final static void registerPermissionsFor(Class subClass) { defaultPermissionFactory.registerPublicPermissions(subClass); } diff --git a/acl/src/main/java/org/springframework/security/acls/domain/DefaultPermissionFactory.java b/acl/src/main/java/org/springframework/security/acls/domain/DefaultPermissionFactory.java index 55f62c778f..e9fe4d34d7 100644 --- a/acl/src/main/java/org/springframework/security/acls/domain/DefaultPermissionFactory.java +++ b/acl/src/main/java/org/springframework/security/acls/domain/DefaultPermissionFactory.java @@ -10,32 +10,28 @@ import org.springframework.util.Assert; /** * Default implementation of {@link PermissionFactory}. - * *

* Generally this class will be used by a {@link Permission} instance, as opposed to being dependency * injected into a {@link LookupStrategy} or similar. Nevertheless, the latter mode of operation is * fully supported (in which case your {@link Permission} implementations probably should extend * {@link AbstractPermission} instead of {@link AbstractRegisteredPermission}). - *

- * + * * @author Ben Alex * @since 2.0.3 - * */ public class DefaultPermissionFactory implements PermissionFactory { - private Map registeredPermissionsByInteger = new HashMap(); - private Map registeredPermissionsByName = new HashMap(); + private final Map registeredPermissionsByInteger = new HashMap(); + private final Map registeredPermissionsByName = new HashMap(); /** * Permit registration of a {@link DefaultPermissionFactory} class. The class must provide * public static fields of type {@link Permission} to represent the possible permissions. - * + * * @param clazz a {@link Permission} class with public static fields to register */ - public void registerPublicPermissions(Class clazz) { + public void registerPublicPermissions(Class clazz) { Assert.notNull(clazz, "Class required"); - Assert.isAssignable(Permission.class, clazz); - + Field[] fields = clazz.getFields(); for (int i = 0; i < fields.length; i++) { @@ -46,7 +42,7 @@ public class DefaultPermissionFactory implements PermissionFactory { // Found a Permission static field Permission perm = (Permission) fieldValue; String permissionName = fields[i].getName(); - + registerPermission(perm, permissionName); } } catch (Exception ignore) {} @@ -56,18 +52,18 @@ public class DefaultPermissionFactory implements PermissionFactory { public void registerPermission(Permission perm, String permissionName) { Assert.notNull(perm, "Permission required"); Assert.hasText(permissionName, "Permission name required"); - + Integer mask = new Integer(perm.getMask()); // Ensure no existing Permission uses this integer or code Assert.isTrue(!registeredPermissionsByInteger.containsKey(mask), "An existing Permission already provides mask " + mask); Assert.isTrue(!registeredPermissionsByName.containsKey(permissionName), "An existing Permission already provides name '" + permissionName + "'"); - + // Register the new Permission registeredPermissionsByInteger.put(mask, perm); registeredPermissionsByName.put(permissionName, perm); } - + public Permission buildFromMask(int mask) { if (registeredPermissionsByInteger.containsKey(new Integer(mask))) { // The requested mask has an exactly match against a statically-defined Permission, so return it @@ -123,5 +119,5 @@ public class DefaultPermissionFactory implements PermissionFactory { return permissions; } - + }