Browse Source

Tidying up, removing compiler warnings etc.

Luke Taylor 16 năm trước cách đây
mục cha
commit
cc5966bc7e
100 tập tin đã thay đổi với 1675 bổ sung1763 xóa
  1. 1 1
      acl/src/main/java/org/springframework/security/acls/Acl.java
  2. 6 5
      acl/src/main/java/org/springframework/security/acls/AclService.java
  3. 3 3
      acl/src/main/java/org/springframework/security/acls/domain/AbstractPermission.java
  4. 34 34
      acl/src/main/java/org/springframework/security/acls/domain/AccessControlEntryImpl.java
  5. 1 1
      acl/src/main/java/org/springframework/security/acls/domain/CumulativePermission.java
  6. 15 15
      acl/src/main/java/org/springframework/security/acls/domain/DefaultPermissionFactory.java
  7. 9 9
      acl/src/main/java/org/springframework/security/acls/domain/PermissionFactory.java
  8. 9 6
      acl/src/main/java/org/springframework/security/acls/jdbc/BasicLookupStrategy.java
  9. 9 9
      acl/src/main/java/org/springframework/security/acls/jdbc/EhCacheBasedAclCache.java
  10. 1 1
      acl/src/main/java/org/springframework/security/acls/jdbc/JdbcAclService.java
  11. 33 33
      acl/src/main/java/org/springframework/security/acls/jdbc/JdbcMutableAclService.java
  12. 1 1
      acl/src/main/java/org/springframework/security/acls/objectidentity/ObjectIdentity.java
  13. 101 101
      acl/src/test/java/org/springframework/security/acls/AclFormattingUtilsTests.java
  14. 2 2
      acl/src/test/java/org/springframework/security/acls/domain/PermissionTests.java
  15. 2 2
      acl/src/test/java/org/springframework/security/acls/domain/SpecialPermission.java
  16. 151 151
      acl/src/test/java/org/springframework/security/acls/jdbc/AclPermissionInheritanceTests.java
  17. 17 17
      acl/src/test/java/org/springframework/security/acls/jdbc/BasicLookupStrategyTests.java
  18. 17 18
      acl/src/test/java/org/springframework/security/acls/jdbc/EhCacheBasedAclCacheTests.java
  19. 1 0
      acl/src/test/java/org/springframework/security/acls/objectidentity/ObjectIdentityTests.java
  20. 12 12
      acl/src/test/java/org/springframework/security/acls/sid/SidTests.java
  21. 10 22
      cas/src/main/java/org/springframework/security/providers/cas/CasAuthenticationProvider.java
  22. 24 24
      cas/src/main/java/org/springframework/security/providers/cas/cache/NullStatelessTicketCache.java
  23. 3 3
      cas/src/main/java/org/springframework/security/ui/cas/CasProcessingFilterEntryPoint.java
  24. 1 1
      cas/src/main/java/org/springframework/security/ui/cas/ServiceProperties.java
  25. 11 10
      cas/src/test/java/org/springframework/security/providers/cas/CasAuthenticationProviderTests.java
  26. 7 10
      cas/src/test/java/org/springframework/security/providers/cas/cache/AbstractStatelessTicketCacheTests.java
  27. 14 14
      cas/src/test/java/org/springframework/security/providers/cas/cache/NullStatelessTicketCacheTests.java
  28. 0 3
      core/src/main/java/org/springframework/security/GrantedAuthority.java
  29. 12 12
      core/src/main/java/org/springframework/security/GrantedAuthorityImpl.java
  30. 3 3
      core/src/main/java/org/springframework/security/concurrent/ConcurrentSessionControllerImpl.java
  31. 0 1
      core/src/main/java/org/springframework/security/concurrent/ConcurrentSessionFilter.java
  32. 39 39
      core/src/main/java/org/springframework/security/config/AbstractUserDetailsServiceBeanDefinitionParser.java
  33. 9 9
      core/src/main/java/org/springframework/security/config/AuthenticationManagerBeanDefinitionParser.java
  34. 21 21
      core/src/main/java/org/springframework/security/config/BasicAuthenticationBeanDefinitionParser.java
  35. 25 25
      core/src/main/java/org/springframework/security/config/CachingUserDetailsService.java
  36. 2 0
      core/src/main/java/org/springframework/security/config/ConfigUtils.java
  37. 0 1
      core/src/main/java/org/springframework/security/config/FilterInvocationDefinitionSourceBeanDefinitionParser.java
  38. 1 0
      core/src/main/java/org/springframework/security/config/GlobalMethodSecurityBeanDefinitionParser.java
  39. 0 1
      core/src/main/java/org/springframework/security/config/InterceptMethodsBeanDefinitionDecorator.java
  40. 5 5
      core/src/main/java/org/springframework/security/config/JdbcUserServiceBeanDefinitionParser.java
  41. 2 2
      core/src/main/java/org/springframework/security/config/SecurityNamespaceHandler.java
  42. 1 2
      core/src/main/java/org/springframework/security/config/SessionRegistryInjectionBeanPostProcessor.java
  43. 3 3
      core/src/main/java/org/springframework/security/event/authentication/InteractiveAuthenticationSuccessEvent.java
  44. 11 10
      core/src/main/java/org/springframework/security/event/authentication/LoggerListener.java
  45. 6 7
      core/src/main/java/org/springframework/security/intercept/method/MapBasedMethodDefinitionSource.java
  46. 9 17
      core/src/main/java/org/springframework/security/intercept/method/MethodDefinitionSourceEditor.java
  47. 13 26
      core/src/main/java/org/springframework/security/intercept/method/ProtectPointcutPostProcessor.java
  48. 1 0
      core/src/main/java/org/springframework/security/intercept/method/aopalliance/MethodDefinitionSourceAdvisor.java
  49. 12 12
      core/src/main/java/org/springframework/security/intercept/web/RequestKey.java
  50. 7 10
      core/src/main/java/org/springframework/security/ldap/populator/DefaultLdapAuthoritiesPopulator.java
  51. 12 12
      core/src/main/java/org/springframework/security/ldap/search/FilterBasedLdapUserSearch.java
  52. 4 4
      core/src/main/java/org/springframework/security/providers/anonymous/AnonymousProcessingFilter.java
  53. 2 2
      core/src/main/java/org/springframework/security/providers/dao/DaoAuthenticationProvider.java
  54. 156 156
      core/src/main/java/org/springframework/security/providers/encoding/Md4.java
  55. 42 42
      core/src/main/java/org/springframework/security/providers/encoding/Md4PasswordEncoder.java
  56. 5 5
      core/src/main/java/org/springframework/security/providers/encoding/MessageDigestPasswordEncoder.java
  57. 7 9
      core/src/main/java/org/springframework/security/providers/jaas/AuthorityGranter.java
  58. 63 74
      core/src/main/java/org/springframework/security/providers/jaas/JaasAuthenticationProvider.java
  59. 4 2
      core/src/main/java/org/springframework/security/providers/jaas/JaasAuthenticationToken.java
  60. 13 10
      core/src/main/java/org/springframework/security/providers/jaas/SecurityContextLoginModule.java
  61. 9 13
      core/src/main/java/org/springframework/security/providers/ldap/authenticator/PasswordComparisonAuthenticator.java
  62. 6 11
      core/src/main/java/org/springframework/security/providers/preauth/PreAuthenticatedAuthenticationProvider.java
  63. 6 5
      core/src/main/java/org/springframework/security/providers/rcp/RemoteAuthenticationManager.java
  64. 10 6
      core/src/main/java/org/springframework/security/providers/rcp/RemoteAuthenticationProvider.java
  65. 11 23
      core/src/main/java/org/springframework/security/providers/rememberme/RememberMeAuthenticationProvider.java
  66. 3 0
      core/src/main/java/org/springframework/security/providers/rememberme/RememberMeAuthenticationToken.java
  67. 1 1
      core/src/main/java/org/springframework/security/runas/RunAsImplAuthenticationProvider.java
  68. 15 29
      core/src/main/java/org/springframework/security/securechannel/ChannelDecisionManagerImpl.java
  69. 9 14
      core/src/main/java/org/springframework/security/securechannel/ChannelProcessor.java
  70. 13 21
      core/src/main/java/org/springframework/security/securechannel/InsecureChannelProcessor.java
  71. 13 21
      core/src/main/java/org/springframework/security/securechannel/SecureChannelProcessor.java
  72. 39 39
      core/src/main/java/org/springframework/security/token/DefaultToken.java
  73. 108 108
      core/src/main/java/org/springframework/security/token/KeyBasedPersistenceTokenService.java
  74. 47 48
      core/src/main/java/org/springframework/security/token/SecureRandomFactoryBean.java
  75. 26 26
      core/src/main/java/org/springframework/security/token/Token.java
  76. 17 17
      core/src/main/java/org/springframework/security/token/TokenService.java
  77. 0 2
      core/src/main/java/org/springframework/security/ui/SavedRequestAwareAuthenticationSuccessHandler.java
  78. 10 10
      core/src/main/java/org/springframework/security/ui/basicauth/BasicProcessingFilter.java
  79. 2 2
      core/src/main/java/org/springframework/security/ui/basicauth/BasicProcessingFilterEntryPoint.java
  80. 6 6
      core/src/main/java/org/springframework/security/ui/digestauth/DigestProcessingFilterEntryPoint.java
  81. 2 2
      core/src/main/java/org/springframework/security/ui/preauth/AbstractPreAuthenticatedProcessingFilter.java
  82. 3 3
      core/src/main/java/org/springframework/security/ui/preauth/PreAuthenticatedCredentialsNotFoundException.java
  83. 14 14
      core/src/main/java/org/springframework/security/ui/preauth/PreAuthenticatedGrantedAuthoritiesWebAuthenticationDetails.java
  84. 19 19
      core/src/main/java/org/springframework/security/ui/preauth/PreAuthenticatedProcessingFilterEntryPoint.java
  85. 41 41
      core/src/main/java/org/springframework/security/ui/preauth/header/RequestHeaderPreAuthenticatedProcessingFilter.java
  86. 19 18
      core/src/main/java/org/springframework/security/ui/preauth/websphere/WASSecurityHelper.java
  87. 73 73
      core/src/main/java/org/springframework/security/ui/preauth/websphere/WebSphere2SpringSecurityPropagationInterceptor.java
  88. 1 2
      core/src/main/java/org/springframework/security/ui/preauth/websphere/WebSpherePreAuthenticatedAuthenticationDetailsSource.java
  89. 8 8
      core/src/main/java/org/springframework/security/ui/preauth/websphere/WebSpherePreAuthenticatedWebAuthenticationDetailsSource.java
  90. 4 4
      core/src/main/java/org/springframework/security/ui/rememberme/InMemoryTokenRepositoryImpl.java
  91. 9 9
      core/src/main/java/org/springframework/security/ui/rememberme/JdbcTokenRepositoryImpl.java
  92. 6 6
      core/src/main/java/org/springframework/security/ui/rememberme/RememberMeProcessingFilter.java
  93. 9 7
      core/src/main/java/org/springframework/security/ui/savedrequest/FastHttpDateFormat.java
  94. 9 9
      core/src/main/java/org/springframework/security/userdetails/AuthenticationUserDetailsService.java
  95. 26 26
      core/src/main/java/org/springframework/security/userdetails/UserDetailsByNameServiceWrapper.java
  96. 3 0
      core/src/main/java/org/springframework/security/userdetails/jdbc/JdbcDaoImpl.java
  97. 6 5
      core/src/main/java/org/springframework/security/userdetails/jdbc/JdbcUserDetailsManager.java
  98. 77 77
      core/src/main/java/org/springframework/security/userdetails/ldap/InetOrgPerson.java
  99. 7 5
      core/src/main/java/org/springframework/security/userdetails/ldap/LdapUserDetailsManager.java
  100. 3 3
      core/src/main/java/org/springframework/security/userdetails/memory/UserMap.java

+ 1 - 1
acl/src/main/java/org/springframework/security/acls/Acl.java

@@ -44,7 +44,7 @@ import java.io.Serializable;
  */
 public interface Acl extends Serializable {
 
-	/**
+    /**
      * Returns all of the entries represented by the present <tt>Acl</tt>. Entries associated with
      * the <tt>Acl</tt> parents are not returned.
      * 

+ 6 - 5
acl/src/main/java/org/springframework/security/acls/AclService.java

@@ -39,9 +39,10 @@ public interface AclService {
     ObjectIdentity[] findChildren(ObjectIdentity parentIdentity);
 
     /**
-     * Same as {@link #readAclsById(ObjectIdentity[])} except it returns only a single Acl.<p>This method
-     * should not be called as it does not leverage the underlaying implementation's potential ability to filter
-     * <tt>Acl</tt> entries based on a {@link Sid} parameter.</p>
+     * Same as {@link #readAclsById(ObjectIdentity[])} except it returns only a single Acl.
+     * <p>
+     * This method should not be called as it does not leverage the underlying implementation's potential ability to
+     * filter <tt>Acl</tt> entries based on a {@link Sid} parameter.</p>
      *
      * @param object to locate an {@link Acl} for
      *
@@ -55,7 +56,7 @@ public interface AclService {
      * Same as {@link #readAclsById(ObjectIdentity[], Sid[])} except it returns only a single Acl.
      *
      * @param object to locate an {@link Acl} for
-     * @param sids the security identities for which  {@link Acl} information is required 
+     * @param sids the security identities for which  {@link Acl} information is required
      *        (may be <tt>null</tt> to denote all entries)
      *
      * @return the {@link Acl} for the requested {@link ObjectIdentity} (never <tt>null</tt>)
@@ -89,7 +90,7 @@ public interface AclService {
      * not have a map key.</p>
      *
      * @param objects the objects to find {@link Acl} information for
-     * @param sids the security identities for which  {@link Acl} information is required 
+     * @param sids the security identities for which  {@link Acl} information is required
      *        (may be <tt>null</tt> to denote all entries)
      *
      * @return a map with exactly one element for each {@link ObjectIdentity} passed as an argument (never <tt>null</tt>)

+ 3 - 3
acl/src/main/java/org/springframework/security/acls/domain/AbstractPermission.java

@@ -53,7 +53,7 @@ public abstract class AbstractPermission implements Permission {
         return this.getClass().getSimpleName() + "[" + getPattern() + "=" + mask + "]";
     }
 
-	public final int hashCode() {
-		return this.mask;
-	}
+    public final int hashCode() {
+        return this.mask;
+    }
 }

+ 34 - 34
acl/src/main/java/org/springframework/security/acls/domain/AccessControlEntryImpl.java

@@ -68,45 +68,45 @@ public class AccessControlEntryImpl implements AccessControlEntry, AuditableAcce
         AccessControlEntryImpl rhs = (AccessControlEntryImpl) arg0;
 
         if (this.acl == null) {
-        	if (rhs.getAcl() != null) {
-        		return false;
-        	}
-        	// Both this.acl and rhs.acl are null and thus equal
+            if (rhs.getAcl() != null) {
+                return false;
+            }
+            // Both this.acl and rhs.acl are null and thus equal
         } else {
-        	// this.acl is non-null
-        	if (rhs.getAcl() == null) {
-        		return false;
-        	}
-        	
-        	// Both this.acl and rhs.acl are non-null, so do a comparison
-        	if (this.acl.getObjectIdentity() == null) {
-        		if (rhs.acl.getObjectIdentity() != null) {
-        			return false;
-        		}
-        		// Both this.acl and rhs.acl are null and thus equal
-        	} else {
-        		// Both this.acl.objectIdentity and rhs.acl.objectIdentity are non-null
-            	if (!this.acl.getObjectIdentity().equals(rhs.getAcl().getObjectIdentity())) {
-            		return false;
-            	}
-        	}
+            // this.acl is non-null
+            if (rhs.getAcl() == null) {
+                return false;
+            }
+            
+            // Both this.acl and rhs.acl are non-null, so do a comparison
+            if (this.acl.getObjectIdentity() == null) {
+                if (rhs.acl.getObjectIdentity() != null) {
+                    return false;
+                }
+                // Both this.acl and rhs.acl are null and thus equal
+            } else {
+                // Both this.acl.objectIdentity and rhs.acl.objectIdentity are non-null
+                if (!this.acl.getObjectIdentity().equals(rhs.getAcl().getObjectIdentity())) {
+                    return false;
+                }
+            }
         }
         
         if (this.id == null) {
-        	if (rhs.id != null) {
-        		return false;
-        	}
-        	// Both this.id and rhs.id are null and thus equal
+            if (rhs.id != null) {
+                return false;
+            }
+            // Both this.id and rhs.id are null and thus equal
         } else {
-        	// this.id is non-null
-        	if (rhs.id == null) {
-        		return false;
-        	}
-
-        	// Both this.id and rhs.id are non-null
-        	if (!this.id.equals(rhs.id)) {
-        		return false;
-        	}
+            // this.id is non-null
+            if (rhs.id == null) {
+                return false;
+            }
+
+            // Both this.id and rhs.id are non-null
+            if (!this.id.equals(rhs.id)) {
+                return false;
+            }
         }
         
         if ((this.auditFailure != rhs.isAuditFailure()) || (this.auditSuccess != rhs.isAuditSuccess())

+ 1 - 1
acl/src/main/java/org/springframework/security/acls/domain/CumulativePermission.java

@@ -31,7 +31,7 @@ public class CumulativePermission extends AbstractPermission {
     private String pattern = THIRTY_TWO_RESERVED_OFF;
 
     public CumulativePermission() {
-    	super(0, ' ');
+        super(0, ' ');
     }
     
     public CumulativePermission clear(Permission permission) {

+ 15 - 15
acl/src/main/java/org/springframework/security/acls/domain/DefaultPermissionFactory.java

@@ -36,7 +36,7 @@ public class DefaultPermissionFactory implements PermissionFactory {
         Assert.notNull(clazz, "Class required");
         Assert.isAssignable(Permission.class, clazz);
         
-    	Field[] fields = clazz.getFields();
+        Field[] fields = clazz.getFields();
 
         for (int i = 0; i < fields.length; i++) {
             try {
@@ -53,20 +53,20 @@ 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 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))) {

+ 9 - 9
acl/src/main/java/org/springframework/security/acls/domain/PermissionFactory.java

@@ -11,14 +11,14 @@ import org.springframework.security.acls.Permission;
  */
 public interface PermissionFactory {
 
-	/**
-	 * Dynamically creates a <code>CumulativePermission</code> or <code>BasePermission</code> representing the
-	 * active bits in the passed mask.
-	 *
-	 * @param mask to build
-	 *
-	 * @return a Permission representing the requested object
-	 */
-	public abstract Permission buildFromMask(int mask);
+    /**
+     * Dynamically creates a <code>CumulativePermission</code> or <code>BasePermission</code> representing the
+     * active bits in the passed mask.
+     *
+     * @param mask to build
+     *
+     * @return a Permission representing the requested object
+     */
+    public abstract Permission buildFromMask(int mask);
 
 }

+ 9 - 6
acl/src/main/java/org/springframework/security/acls/jdbc/BasicLookupStrategy.java

@@ -290,7 +290,7 @@ public final class BasicLookupStrategy implements LookupStrategy {
      * already, and adding the returned elements to the cache etc.</p>
      * <p>
      * This subclass is required to return fully valid <code>Acl</code>s, including properly-configured
-     * parent ACLs.</p>
+     * parent ACLs.
      *
      */
     private Map<ObjectIdentity, Acl> lookupObjectIdentities(final ObjectIdentity[] objectIdentities, Sid[] sids) {
@@ -349,7 +349,7 @@ public final class BasicLookupStrategy implements LookupStrategy {
      *
      * @param acls the AclImpls (with StubAclParents)
      * @param findNow Long-based primary keys to retrieve
-     * @param sids DOCUMENT ME!
+     * @param sids
      */
     private void lookupPrimaryKeys(final Map acls, final Set findNow, final Sid[] sids) {
         Assert.notNull(acls, "ACLs are required");
@@ -378,11 +378,14 @@ public final class BasicLookupStrategy implements LookupStrategy {
     }
 
     /**
-     * The main method.<p>WARNING: This implementation completely disregards the "sids" argument! Every item
-     * in the cache is expected to contain all SIDs. If you have serious performance needs (eg a very large number of
+     * The main method.
+     * <p>
+     * WARNING: This implementation completely disregards the "sids" argument! Every item in the cache is expected to
+     * contain all SIDs. If you have serious performance needs (e.g. a very large number of
      * SIDs per object identity), you'll probably want to develop a custom {@link LookupStrategy} implementation
-     * instead.</p>
-     *  <p>The implementation works in batch sizes specfied by {@link #batchSize}.</p>
+     * instead.
+     * <p>
+     * The implementation works in batch sizes specified by {@link #batchSize}.
      *
      * @param objects the identities to lookup (required)
      * @param sids the SIDs for which identities are required (ignored by this implementation)

+ 9 - 9
acl/src/main/java/org/springframework/security/acls/jdbc/EhCacheBasedAclCache.java

@@ -94,7 +94,7 @@ public class EhCacheBasedAclCache implements AclCache {
         return initializeTransientFields((MutableAcl)element.getValue());
     }
 
-	public MutableAcl getFromCache(Serializable pk) {
+    public MutableAcl getFromCache(Serializable pk) {
         Assert.notNull(pk, "Primary key (identifier) required");
 
         Element element = null;
@@ -117,8 +117,8 @@ public class EhCacheBasedAclCache implements AclCache {
 
         if (this.aclAuthorizationStrategy == null) {
             if (acl instanceof AclImpl) {
-            	this.aclAuthorizationStrategy = (AclAuthorizationStrategy) FieldUtils.getProtectedFieldValue("aclAuthorizationStrategy", acl);
-            	this.auditLogger = (AuditLogger) FieldUtils.getProtectedFieldValue("auditLogger", acl);
+                this.aclAuthorizationStrategy = (AclAuthorizationStrategy) FieldUtils.getProtectedFieldValue("aclAuthorizationStrategy", acl);
+                this.auditLogger = (AuditLogger) FieldUtils.getProtectedFieldValue("auditLogger", acl);
             }
         }
         
@@ -131,10 +131,10 @@ public class EhCacheBasedAclCache implements AclCache {
     }
 
     private MutableAcl initializeTransientFields(MutableAcl value) {
-    	if (value instanceof AclImpl) {
-    		FieldUtils.setProtectedFieldValue("aclAuthorizationStrategy", value, this.aclAuthorizationStrategy);
-    		FieldUtils.setProtectedFieldValue("auditLogger", value, this.auditLogger);
-    	}
-    	return value;
-	}
+        if (value instanceof AclImpl) {
+            FieldUtils.setProtectedFieldValue("aclAuthorizationStrategy", value, this.aclAuthorizationStrategy);
+            FieldUtils.setProtectedFieldValue("auditLogger", value, this.auditLogger);
+        }
+        return value;
+    }
 }

+ 1 - 1
acl/src/main/java/org/springframework/security/acls/jdbc/JdbcAclService.java

@@ -89,7 +89,7 @@ public class JdbcAclService implements AclService {
                 });
 
         if (objects.size() == 0) {
-        	return null;
+            return null;
         }
         
         return (ObjectIdentityImpl[]) objects.toArray(new ObjectIdentityImpl[objects.size()]);

+ 33 - 33
acl/src/main/java/org/springframework/security/acls/jdbc/JdbcMutableAclService.java

@@ -60,7 +60,7 @@ import javax.sql.DataSource;
 public class JdbcMutableAclService extends JdbcAclService implements MutableAclService {
     //~ Instance fields ================================================================================================
 
-	private boolean foreignKeysInDatabase = true;
+    private boolean foreignKeysInDatabase = true;
     private AclCache aclCache;
     private String deleteEntryByObjectIdentityForeignKey = "delete from acl_entry where acl_object_identity=?";
     private String deleteObjectIdentityByPrimaryKey = "delete from acl_object_identity where id=?";
@@ -237,22 +237,22 @@ public class JdbcMutableAclService extends JdbcAclService implements MutableAclS
         Assert.notNull(objectIdentity.getIdentifier(), "Object Identity doesn't provide an identifier");
 
         if (deleteChildren) {
-        	ObjectIdentity[] children = findChildren(objectIdentity);
-        	if (children != null) {
-            	for (int i = 0; i < children.length; i++) {
+            ObjectIdentity[] children = findChildren(objectIdentity);
+            if (children != null) {
+                for (int i = 0; i < children.length; i++) {
                     deleteAcl(children[i], true);
                 }
-        	}
+            }
         } else {
-        	if (!foreignKeysInDatabase) {
-        		// We need to perform a manual verification for what a FK would normally do
-        		// We generally don't do this, in the interests of deadlock management
-        		ObjectIdentity[] children = findChildren(objectIdentity);
-        		if (children != null) {
+            if (!foreignKeysInDatabase) {
+                // We need to perform a manual verification for what a FK would normally do
+                // We generally don't do this, in the interests of deadlock management
+                ObjectIdentity[] children = findChildren(objectIdentity);
+                if (children != null) {
                     throw new ChildrenExistException("Cannot delete '" + objectIdentity + "' (has " + children.length
                             + " children)");
-        		}
-        	}
+                }
+            }
         }
 
         Long oidPrimaryKey = retrieveObjectIdentityPrimaryKey(objectIdentity);
@@ -273,7 +273,7 @@ public class JdbcMutableAclService extends JdbcAclService implements MutableAclS
      * @param oidPrimaryKey the rows in acl_entry to delete
      */
     protected void deleteEntries(Long oidPrimaryKey) {
-    	jdbcTemplate.update(deleteEntryByObjectIdentityForeignKey,
+        jdbcTemplate.update(deleteEntryByObjectIdentityForeignKey,
                 new Object[] {oidPrimaryKey});
     }
 
@@ -341,12 +341,12 @@ public class JdbcMutableAclService extends JdbcAclService implements MutableAclS
     }
     
     private void clearCacheIncludingChildren(ObjectIdentity objectIdentity) {
-    	Assert.notNull(objectIdentity, "ObjectIdentity required");
+        Assert.notNull(objectIdentity, "ObjectIdentity required");
         ObjectIdentity[] children = findChildren(objectIdentity);
         if (children != null) {
-        	for (int i = 0; i < children.length; i++) {
-        		clearCacheIncludingChildren(children[i]);
-        	}
+            for (int i = 0; i < children.length; i++) {
+                clearCacheIncludingChildren(children[i]);
+            }
         }
         aclCache.evictFromCache(objectIdentity);
     }
@@ -381,20 +381,20 @@ public class JdbcMutableAclService extends JdbcAclService implements MutableAclS
         }
     }
 
-	public void setClassIdentityQuery(String identityQuery) {
-		Assert.hasText(identityQuery, "New identity query is required");
-		this.classIdentityQuery = identityQuery;
-	}
-
-	public void setSidIdentityQuery(String identityQuery) {
-		Assert.hasText(identityQuery, "New identity query is required");
-		this.sidIdentityQuery = identityQuery;
-	}
-	/**
-	 * @param foreignKeysInDatabase if false this class will perform additional FK constrain checking, which may
-	 * cause deadlocks (the default is true, so deadlocks are avoided but the database is expected to enforce FKs)
-	 */
-	public void setForeignKeysInDatabase(boolean foreignKeysInDatabase) {
-		this.foreignKeysInDatabase = foreignKeysInDatabase;
-	}
+    public void setClassIdentityQuery(String identityQuery) {
+        Assert.hasText(identityQuery, "New identity query is required");
+        this.classIdentityQuery = identityQuery;
+    }
+
+    public void setSidIdentityQuery(String identityQuery) {
+        Assert.hasText(identityQuery, "New identity query is required");
+        this.sidIdentityQuery = identityQuery;
+    }
+    /**
+     * @param foreignKeysInDatabase if false this class will perform additional FK constrain checking, which may
+     * cause deadlocks (the default is true, so deadlocks are avoided but the database is expected to enforce FKs)
+     */
+    public void setForeignKeysInDatabase(boolean foreignKeysInDatabase) {
+        this.foreignKeysInDatabase = foreignKeysInDatabase;
+    }
 }

+ 1 - 1
acl/src/main/java/org/springframework/security/acls/objectidentity/ObjectIdentity.java

@@ -62,7 +62,7 @@ public interface ObjectIdentity extends Serializable {
      *
      * @return the Java type of the domain object (never <tt>null</tt>)
      */
-    Class getJavaType();
+    Class<?> getJavaType();
 
     /**
      * @return a hash code representation of the <tt>ObjectIdentity</tt>

+ 101 - 101
acl/src/test/java/org/springframework/security/acls/AclFormattingUtilsTests.java

@@ -10,115 +10,115 @@ import junit.framework.TestCase;
  */
 public class AclFormattingUtilsTests extends TestCase {
 
-	//~ Methods ========================================================================================================
-	
-	public final void testDemergePatternsParametersConstraints() throws Exception {
-		try {
-			AclFormattingUtils.demergePatterns(null, "SOME STRING");
-			Assert.fail("It should have thrown IllegalArgumentException");
-		}
-		catch (IllegalArgumentException expected) {
-			Assert.assertTrue(true);
-		}
+    //~ Methods ========================================================================================================
+    
+    public final void testDemergePatternsParametersConstraints() throws Exception {
+        try {
+            AclFormattingUtils.demergePatterns(null, "SOME STRING");
+            Assert.fail("It should have thrown IllegalArgumentException");
+        }
+        catch (IllegalArgumentException expected) {
+            Assert.assertTrue(true);
+        }
 
-		try {
-			AclFormattingUtils.demergePatterns("SOME STRING", null);
-			Assert.fail("It should have thrown IllegalArgumentException");
-		}
-		catch (IllegalArgumentException expected) {
-			Assert.assertTrue(true);
-		}
+        try {
+            AclFormattingUtils.demergePatterns("SOME STRING", null);
+            Assert.fail("It should have thrown IllegalArgumentException");
+        }
+        catch (IllegalArgumentException expected) {
+            Assert.assertTrue(true);
+        }
 
-		try {
-			AclFormattingUtils.demergePatterns("SOME STRING", "LONGER SOME STRING");
-			Assert.fail("It should have thrown IllegalArgumentException");
-		}
-		catch (IllegalArgumentException expected) {
-			Assert.assertTrue(true);
-		}
+        try {
+            AclFormattingUtils.demergePatterns("SOME STRING", "LONGER SOME STRING");
+            Assert.fail("It should have thrown IllegalArgumentException");
+        }
+        catch (IllegalArgumentException expected) {
+            Assert.assertTrue(true);
+        }
 
-		try {
-			AclFormattingUtils.demergePatterns("SOME STRING", "SAME LENGTH");
-			Assert.assertTrue(true);
-		}
-		catch (IllegalArgumentException notExpected) {
-			Assert.fail("It shouldn't have thrown IllegalArgumentException");
-		}
-	}
+        try {
+            AclFormattingUtils.demergePatterns("SOME STRING", "SAME LENGTH");
+            Assert.assertTrue(true);
+        }
+        catch (IllegalArgumentException notExpected) {
+            Assert.fail("It shouldn't have thrown IllegalArgumentException");
+        }
+    }
 
-	public final void testDemergePatterns() throws Exception {
-		String original = "...........................A...R";
-		String removeBits = "...............................R";
-		Assert.assertEquals("...........................A....", AclFormattingUtils
-				.demergePatterns(original, removeBits));
+    public final void testDemergePatterns() throws Exception {
+        String original = "...........................A...R";
+        String removeBits = "...............................R";
+        Assert.assertEquals("...........................A....", AclFormattingUtils
+                .demergePatterns(original, removeBits));
 
-		Assert.assertEquals("ABCDEF", AclFormattingUtils.demergePatterns("ABCDEF", "......"));
-		Assert.assertEquals("......", AclFormattingUtils.demergePatterns("ABCDEF", "GHIJKL"));
-	}
-	
-	public final void testMergePatternsParametersConstraints() throws Exception {
-		try {
-			AclFormattingUtils.mergePatterns(null, "SOME STRING");
-			Assert.fail("It should have thrown IllegalArgumentException");
-		}
-		catch (IllegalArgumentException expected) {
-			Assert.assertTrue(true);
-		}
+        Assert.assertEquals("ABCDEF", AclFormattingUtils.demergePatterns("ABCDEF", "......"));
+        Assert.assertEquals("......", AclFormattingUtils.demergePatterns("ABCDEF", "GHIJKL"));
+    }
+    
+    public final void testMergePatternsParametersConstraints() throws Exception {
+        try {
+            AclFormattingUtils.mergePatterns(null, "SOME STRING");
+            Assert.fail("It should have thrown IllegalArgumentException");
+        }
+        catch (IllegalArgumentException expected) {
+            Assert.assertTrue(true);
+        }
 
-		try {
-			AclFormattingUtils.mergePatterns("SOME STRING", null);
-			Assert.fail("It should have thrown IllegalArgumentException");
-		}
-		catch (IllegalArgumentException expected) {
-			Assert.assertTrue(true);
-		}
+        try {
+            AclFormattingUtils.mergePatterns("SOME STRING", null);
+            Assert.fail("It should have thrown IllegalArgumentException");
+        }
+        catch (IllegalArgumentException expected) {
+            Assert.assertTrue(true);
+        }
 
-		try {
-			AclFormattingUtils.mergePatterns("SOME STRING", "LONGER SOME STRING");
-			Assert.fail("It should have thrown IllegalArgumentException");
-		}
-		catch (IllegalArgumentException expected) {
-			Assert.assertTrue(true);
-		}
+        try {
+            AclFormattingUtils.mergePatterns("SOME STRING", "LONGER SOME STRING");
+            Assert.fail("It should have thrown IllegalArgumentException");
+        }
+        catch (IllegalArgumentException expected) {
+            Assert.assertTrue(true);
+        }
 
-		try {
-			AclFormattingUtils.mergePatterns("SOME STRING", "SAME LENGTH");
-			Assert.assertTrue(true);
-		}
-		catch (IllegalArgumentException notExpected) {
-			Assert.fail("It shouldn't have thrown IllegalArgumentException");
-		}
-	}
+        try {
+            AclFormattingUtils.mergePatterns("SOME STRING", "SAME LENGTH");
+            Assert.assertTrue(true);
+        }
+        catch (IllegalArgumentException notExpected) {
+            Assert.fail("It shouldn't have thrown IllegalArgumentException");
+        }
+    }
 
-	public final void testMergePatterns() throws Exception {
-		String original = "...............................R";
-		String extraBits = "...........................A....";
-		Assert.assertEquals("...........................A...R", AclFormattingUtils
-				.mergePatterns(original, extraBits));
+    public final void testMergePatterns() throws Exception {
+        String original = "...............................R";
+        String extraBits = "...........................A....";
+        Assert.assertEquals("...........................A...R", AclFormattingUtils
+                .mergePatterns(original, extraBits));
 
-		Assert.assertEquals("ABCDEF", AclFormattingUtils.mergePatterns("ABCDEF", "......"));
-		Assert.assertEquals("GHIJKL", AclFormattingUtils.mergePatterns("ABCDEF", "GHIJKL"));
-	}
-	
-	public final void testBinaryPrints() throws Exception {
-		Assert.assertEquals("............................****", AclFormattingUtils.printBinary(15));
-		
-		try {
-			AclFormattingUtils.printBinary(15, Permission.RESERVED_ON);
-			Assert.fail("It should have thrown IllegalArgumentException");
-		}
-		catch (IllegalArgumentException notExpected) {
-			Assert.assertTrue(true);
-		}
-		
-		try {
-			AclFormattingUtils.printBinary(15, Permission.RESERVED_OFF);
-			Assert.fail("It should have thrown IllegalArgumentException");
-		}
-		catch (IllegalArgumentException notExpected) {
-			Assert.assertTrue(true);
-		}
-		
-		Assert.assertEquals("............................xxxx", AclFormattingUtils.printBinary(15, 'x'));
-	}
+        Assert.assertEquals("ABCDEF", AclFormattingUtils.mergePatterns("ABCDEF", "......"));
+        Assert.assertEquals("GHIJKL", AclFormattingUtils.mergePatterns("ABCDEF", "GHIJKL"));
+    }
+    
+    public final void testBinaryPrints() throws Exception {
+        Assert.assertEquals("............................****", AclFormattingUtils.printBinary(15));
+        
+        try {
+            AclFormattingUtils.printBinary(15, Permission.RESERVED_ON);
+            Assert.fail("It should have thrown IllegalArgumentException");
+        }
+        catch (IllegalArgumentException notExpected) {
+            Assert.assertTrue(true);
+        }
+        
+        try {
+            AclFormattingUtils.printBinary(15, Permission.RESERVED_OFF);
+            Assert.fail("It should have thrown IllegalArgumentException");
+        }
+        catch (IllegalArgumentException notExpected) {
+            Assert.assertTrue(true);
+        }
+        
+        Assert.assertEquals("............................xxxx", AclFormattingUtils.printBinary(15, 'x'));
+    }
 }

+ 2 - 2
acl/src/test/java/org/springframework/security/acls/domain/PermissionTests.java

@@ -34,8 +34,8 @@ public class PermissionTests {
 
     @Test
     public void basePermissionTest() {
-    	Permission p = BasePermission.buildFromName("WRITE");
-    	assertNotNull(p);
+        Permission p = BasePermission.buildFromName("WRITE");
+        assertNotNull(p);
     }
 
     @Test

+ 2 - 2
acl/src/test/java/org/springframework/security/acls/domain/SpecialPermission.java

@@ -31,10 +31,10 @@ public class SpecialPermission extends BasePermission {
      * that the static methods will operate correctly.
      */
     static {
-    	registerPermissionsFor(SpecialPermission.class);
+        registerPermissionsFor(SpecialPermission.class);
     }
 
     protected SpecialPermission(int mask, char code) {
-    	super(mask, code);
+        super(mask, code);
     }
 }

+ 151 - 151
acl/src/test/java/org/springframework/security/acls/jdbc/AclPermissionInheritanceTests.java

@@ -12,7 +12,6 @@ import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.datasource.DataSourceTransactionManager;
 import org.springframework.jdbc.datasource.DriverManagerDataSource;
 import org.springframework.security.Authentication;
-import org.springframework.security.GrantedAuthority;
 import org.springframework.security.GrantedAuthorityImpl;
 import org.springframework.security.acls.MutableAcl;
 import org.springframework.security.acls.domain.AclAuthorizationStrategyImpl;
@@ -24,155 +23,156 @@ import org.springframework.security.acls.sid.GrantedAuthoritySid;
 import org.springframework.security.acls.sid.PrincipalSid;
 import org.springframework.security.context.SecurityContextHolder;
 import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
+import org.springframework.security.util.AuthorityUtils;
 import org.springframework.transaction.TransactionStatus;
 import org.springframework.transaction.support.DefaultTransactionDefinition;
 
 public class AclPermissionInheritanceTests extends TestCase {
 
-	private JdbcMutableAclService aclService;
-	private JdbcTemplate jdbcTemplate;
-	private DriverManagerDataSource dataSource;
-	private DataSourceTransactionManager txManager;
-	private TransactionStatus txStatus;
-
-	protected void setUp() throws Exception {
-		
-		dataSource = new DriverManagerDataSource();
-		dataSource.setDriverClassName("org.hsqldb.jdbcDriver");
-		dataSource.setUrl("jdbc:hsqldb:mem:permissiontest");
-		dataSource.setUsername("sa");
-		dataSource.setPassword("");
-
-		jdbcTemplate = new JdbcTemplate(dataSource);
-		
-		txManager = new DataSourceTransactionManager();
-		txManager.setDataSource(dataSource);
-		
-		txStatus = txManager.getTransaction(new DefaultTransactionDefinition());
-		
-		aclService = createAclService(dataSource);
-		
-        Authentication auth = new UsernamePasswordAuthenticationToken(
-        		"system", "secret", new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_IGNORED")});
+    private JdbcMutableAclService aclService;
+    private JdbcTemplate jdbcTemplate;
+    private DriverManagerDataSource dataSource;
+    private DataSourceTransactionManager txManager;
+    private TransactionStatus txStatus;
+
+    protected void setUp() throws Exception {
+
+        dataSource = new DriverManagerDataSource();
+        dataSource.setDriverClassName("org.hsqldb.jdbcDriver");
+        dataSource.setUrl("jdbc:hsqldb:mem:permissiontest");
+        dataSource.setUsername("sa");
+        dataSource.setPassword("");
+
+        jdbcTemplate = new JdbcTemplate(dataSource);
+
+        txManager = new DataSourceTransactionManager();
+        txManager.setDataSource(dataSource);
+
+        txStatus = txManager.getTransaction(new DefaultTransactionDefinition());
+
+        aclService = createAclService(dataSource);
+
+        Authentication auth = new UsernamePasswordAuthenticationToken("system", "secret",
+                AuthorityUtils.createAuthorityList("ROLE_IGNORED"));
         SecurityContextHolder.getContext().setAuthentication(auth);
-	}
-
-	protected void tearDown() throws Exception {
-		txManager.rollback(txStatus);
-		SecurityContextHolder.clearContext();
-	}
-
-	public void test1() throws Exception {
-
-		createAclSchema(jdbcTemplate);
-
-		ObjectIdentityImpl rootObject = 
-			new ObjectIdentityImpl(TestDomainObject.class, new Long(1));
-
-		MutableAcl parent = aclService.createAcl(rootObject);
-		MutableAcl child = aclService.createAcl(new ObjectIdentityImpl(TestDomainObject.class, new Long(2)));
-		child.setParent(parent);
-		aclService.updateAcl(child);
-
-		parent = (AclImpl) aclService.readAclById(rootObject);
-		parent.insertAce(0, BasePermission.READ, 
-				new PrincipalSid("john"), true);
-		aclService.updateAcl(parent);
-
-		parent = (AclImpl) aclService.readAclById(rootObject);
-		parent.insertAce(1, BasePermission.READ, 
-				new PrincipalSid("joe"), true);
-		aclService.updateAcl(parent);
-
-		child = (MutableAcl) aclService.readAclById(
-				new ObjectIdentityImpl(TestDomainObject.class, new Long(2)));
-
-		parent = (MutableAcl) child.getParentAcl();
-
-		assertEquals("Fails because child has a stale reference to its parent", 
-				2, parent.getEntries().length);
-		assertEquals(1, parent.getEntries()[0].getPermission().getMask());
-		assertEquals(new PrincipalSid("john"), parent.getEntries()[0].getSid());
-		assertEquals(1, parent.getEntries()[1].getPermission().getMask());
-		assertEquals(new PrincipalSid("joe"), parent.getEntries()[1].getSid());
-
-	}
-	public void test2() throws Exception {
-
-		createAclSchema(jdbcTemplate);
-
-		ObjectIdentityImpl rootObject = 
-			new ObjectIdentityImpl(TestDomainObject.class, new Long(1));
-
-		MutableAcl parent = aclService.createAcl(rootObject);
-		MutableAcl child = aclService.createAcl(new ObjectIdentityImpl(TestDomainObject.class, new Long(2)));
-		child.setParent(parent);
-		aclService.updateAcl(child);
-
-		parent.insertAce(0, BasePermission.ADMINISTRATION, 
-				new GrantedAuthoritySid("ROLE_ADMINISTRATOR"), true);
-		aclService.updateAcl(parent);
-
-		parent.insertAce(1, BasePermission.DELETE, new PrincipalSid("terry"), true);
-		aclService.updateAcl(parent);
-
-		child = (MutableAcl) aclService.readAclById(
-				new ObjectIdentityImpl(TestDomainObject.class, new Long(2)));
-
-		parent = (MutableAcl) child.getParentAcl();
-
-		assertEquals(2, parent.getEntries().length);
-		assertEquals(16, parent.getEntries()[0].getPermission().getMask());
-		assertEquals(new GrantedAuthoritySid("ROLE_ADMINISTRATOR"), parent.getEntries()[0].getSid());
-		assertEquals(8, parent.getEntries()[1].getPermission().getMask());
-		assertEquals(new PrincipalSid("terry"), parent.getEntries()[1].getSid());
-
-	}
-
-	private JdbcMutableAclService createAclService(DriverManagerDataSource ds)
-		throws IOException {
-
-		GrantedAuthorityImpl adminAuthority = new GrantedAuthorityImpl("ROLE_ADMINISTRATOR");
-		AclAuthorizationStrategyImpl authStrategy = new AclAuthorizationStrategyImpl(
-        		new GrantedAuthorityImpl[]{adminAuthority,adminAuthority,adminAuthority});
-
-		EhCacheManagerFactoryBean ehCacheManagerFactoryBean = new EhCacheManagerFactoryBean();
-		ehCacheManagerFactoryBean.afterPropertiesSet();
-		CacheManager cacheManager = (CacheManager) ehCacheManagerFactoryBean.getObject();
-		
-		EhCacheFactoryBean ehCacheFactoryBean = new EhCacheFactoryBean();
-		ehCacheFactoryBean.setCacheName("aclAche");
-		ehCacheFactoryBean.setCacheManager(cacheManager);
-		ehCacheFactoryBean.afterPropertiesSet();
-		Ehcache ehCache = (Ehcache) ehCacheFactoryBean.getObject();
-		
-		AclCache aclAche = new EhCacheBasedAclCache(ehCache);
-		
-		BasicLookupStrategy lookupStrategy = 
-			new BasicLookupStrategy(ds, aclAche, authStrategy, new ConsoleAuditLogger());
-	
-		return new JdbcMutableAclService(ds,lookupStrategy, aclAche);
-	}
-
-	private void createAclSchema(JdbcTemplate jdbcTemplate) {
-		
-		jdbcTemplate.execute("DROP TABLE ACL_ENTRY IF EXISTS;");
-		jdbcTemplate.execute("DROP TABLE ACL_OBJECT_IDENTITY IF EXISTS;");
-		jdbcTemplate.execute("DROP TABLE ACL_CLASS IF EXISTS");
-		jdbcTemplate.execute("DROP TABLE ACL_SID IF EXISTS");
-		
-		jdbcTemplate.execute(
+    }
+
+    protected void tearDown() throws Exception {
+        txManager.rollback(txStatus);
+        SecurityContextHolder.clearContext();
+    }
+
+    public void test1() throws Exception {
+
+        createAclSchema(jdbcTemplate);
+
+        ObjectIdentityImpl rootObject =
+            new ObjectIdentityImpl(TestDomainObject.class, new Long(1));
+
+        MutableAcl parent = aclService.createAcl(rootObject);
+        MutableAcl child = aclService.createAcl(new ObjectIdentityImpl(TestDomainObject.class, new Long(2)));
+        child.setParent(parent);
+        aclService.updateAcl(child);
+
+        parent = (AclImpl) aclService.readAclById(rootObject);
+        parent.insertAce(0, BasePermission.READ,
+                new PrincipalSid("john"), true);
+        aclService.updateAcl(parent);
+
+        parent = (AclImpl) aclService.readAclById(rootObject);
+        parent.insertAce(1, BasePermission.READ,
+                new PrincipalSid("joe"), true);
+        aclService.updateAcl(parent);
+
+        child = (MutableAcl) aclService.readAclById(
+                new ObjectIdentityImpl(TestDomainObject.class, new Long(2)));
+
+        parent = (MutableAcl) child.getParentAcl();
+
+        assertEquals("Fails because child has a stale reference to its parent",
+                2, parent.getEntries().length);
+        assertEquals(1, parent.getEntries()[0].getPermission().getMask());
+        assertEquals(new PrincipalSid("john"), parent.getEntries()[0].getSid());
+        assertEquals(1, parent.getEntries()[1].getPermission().getMask());
+        assertEquals(new PrincipalSid("joe"), parent.getEntries()[1].getSid());
+
+    }
+    public void test2() throws Exception {
+
+        createAclSchema(jdbcTemplate);
+
+        ObjectIdentityImpl rootObject =
+            new ObjectIdentityImpl(TestDomainObject.class, new Long(1));
+
+        MutableAcl parent = aclService.createAcl(rootObject);
+        MutableAcl child = aclService.createAcl(new ObjectIdentityImpl(TestDomainObject.class, new Long(2)));
+        child.setParent(parent);
+        aclService.updateAcl(child);
+
+        parent.insertAce(0, BasePermission.ADMINISTRATION,
+                new GrantedAuthoritySid("ROLE_ADMINISTRATOR"), true);
+        aclService.updateAcl(parent);
+
+        parent.insertAce(1, BasePermission.DELETE, new PrincipalSid("terry"), true);
+        aclService.updateAcl(parent);
+
+        child = (MutableAcl) aclService.readAclById(
+                new ObjectIdentityImpl(TestDomainObject.class, new Long(2)));
+
+        parent = (MutableAcl) child.getParentAcl();
+
+        assertEquals(2, parent.getEntries().length);
+        assertEquals(16, parent.getEntries()[0].getPermission().getMask());
+        assertEquals(new GrantedAuthoritySid("ROLE_ADMINISTRATOR"), parent.getEntries()[0].getSid());
+        assertEquals(8, parent.getEntries()[1].getPermission().getMask());
+        assertEquals(new PrincipalSid("terry"), parent.getEntries()[1].getSid());
+
+    }
+
+    private JdbcMutableAclService createAclService(DriverManagerDataSource ds)
+        throws IOException {
+
+        GrantedAuthorityImpl adminAuthority = new GrantedAuthorityImpl("ROLE_ADMINISTRATOR");
+        AclAuthorizationStrategyImpl authStrategy = new AclAuthorizationStrategyImpl(
+                new GrantedAuthorityImpl[]{adminAuthority,adminAuthority,adminAuthority});
+
+        EhCacheManagerFactoryBean ehCacheManagerFactoryBean = new EhCacheManagerFactoryBean();
+        ehCacheManagerFactoryBean.afterPropertiesSet();
+        CacheManager cacheManager = (CacheManager) ehCacheManagerFactoryBean.getObject();
+
+        EhCacheFactoryBean ehCacheFactoryBean = new EhCacheFactoryBean();
+        ehCacheFactoryBean.setCacheName("aclAche");
+        ehCacheFactoryBean.setCacheManager(cacheManager);
+        ehCacheFactoryBean.afterPropertiesSet();
+        Ehcache ehCache = (Ehcache) ehCacheFactoryBean.getObject();
+
+        AclCache aclAche = new EhCacheBasedAclCache(ehCache);
+
+        BasicLookupStrategy lookupStrategy =
+            new BasicLookupStrategy(ds, aclAche, authStrategy, new ConsoleAuditLogger());
+
+        return new JdbcMutableAclService(ds,lookupStrategy, aclAche);
+    }
+
+    private void createAclSchema(JdbcTemplate jdbcTemplate) {
+
+        jdbcTemplate.execute("DROP TABLE ACL_ENTRY IF EXISTS;");
+        jdbcTemplate.execute("DROP TABLE ACL_OBJECT_IDENTITY IF EXISTS;");
+        jdbcTemplate.execute("DROP TABLE ACL_CLASS IF EXISTS");
+        jdbcTemplate.execute("DROP TABLE ACL_SID IF EXISTS");
+
+        jdbcTemplate.execute(
                 "CREATE TABLE ACL_SID(" +
                         "ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 100) NOT NULL PRIMARY KEY," +
                         "PRINCIPAL BOOLEAN NOT NULL," +
                         "SID VARCHAR_IGNORECASE(100) NOT NULL," +
                         "CONSTRAINT UNIQUE_UK_1 UNIQUE(SID,PRINCIPAL));");
-            jdbcTemplate.execute(
+        jdbcTemplate.execute(
                 "CREATE TABLE ACL_CLASS(" +
                         "ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 100) NOT NULL PRIMARY KEY," +
                         "CLASS VARCHAR_IGNORECASE(100) NOT NULL," +
                         "CONSTRAINT UNIQUE_UK_2 UNIQUE(CLASS));");
-            jdbcTemplate.execute(
+        jdbcTemplate.execute(
                 "CREATE TABLE ACL_OBJECT_IDENTITY(" +
                         "ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 100) NOT NULL PRIMARY KEY," +
                         "OBJECT_ID_CLASS BIGINT NOT NULL," +
@@ -184,7 +184,7 @@ public class AclPermissionInheritanceTests extends TestCase {
                         "CONSTRAINT FOREIGN_FK_1 FOREIGN KEY(PARENT_OBJECT)REFERENCES ACL_OBJECT_IDENTITY(ID)," +
                         "CONSTRAINT FOREIGN_FK_2 FOREIGN KEY(OBJECT_ID_CLASS)REFERENCES ACL_CLASS(ID)," +
                         "CONSTRAINT FOREIGN_FK_3 FOREIGN KEY(OWNER_SID)REFERENCES ACL_SID(ID));");
-            jdbcTemplate.execute(
+        jdbcTemplate.execute(
                 "CREATE TABLE ACL_ENTRY(" +
                         "ID BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 100) NOT NULL PRIMARY KEY," +
                         "ACL_OBJECT_IDENTITY BIGINT NOT NULL,ACE_ORDER INT NOT NULL,SID BIGINT NOT NULL," +
@@ -192,18 +192,18 @@ public class AclPermissionInheritanceTests extends TestCase {
                         "AUDIT_FAILURE BOOLEAN NOT NULL,CONSTRAINT UNIQUE_UK_4 UNIQUE(ACL_OBJECT_IDENTITY,ACE_ORDER)," +
                         "CONSTRAINT FOREIGN_FK_4 FOREIGN KEY(ACL_OBJECT_IDENTITY) REFERENCES ACL_OBJECT_IDENTITY(ID)," +
                         "CONSTRAINT FOREIGN_FK_5 FOREIGN KEY(SID) REFERENCES ACL_SID(ID));");
-	}
-
-	public static class TestDomainObject {
-		
-		private Long id;
-
-		public Long getId() {
-			return id;
-		}
-		
-		public void setId(Long id) {
-			this.id = id;
-		}
-	}
-}
+    }
+
+    public static class TestDomainObject {
+
+        private Long id;
+
+        public Long getId() {
+            return id;
+        }
+
+        public void setId(Long id) {
+            this.id = id;
+        }
+    }
+}

+ 17 - 17
acl/src/test/java/org/springframework/security/acls/jdbc/BasicLookupStrategyTests.java

@@ -35,12 +35,12 @@ import org.springframework.util.FileCopyUtils;
 
 /**
  * Tests {@link BasicLookupStrategy}
- * 
+ *
  * @author Andrei Stefan
  */
 public class BasicLookupStrategyTests {
     //~ Instance fields ================================================================================================
-    
+
     private static JdbcTemplate jdbcTemplate;
 
     private LookupStrategy strategy;
@@ -123,7 +123,7 @@ public class BasicLookupStrategyTests {
         // Deliberately use an integer for the child, to reproduce bug report in SEC-819
         ObjectIdentity childOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Integer(102));
 
-        Map map = this.strategy.readAclsById(new ObjectIdentity[] { topParentOid, middleParentOid, childOid }, null);
+        Map<ObjectIdentity, Acl> map = this.strategy.readAclsById(new ObjectIdentity[] { topParentOid, middleParentOid, childOid }, null);
         checkEntries(topParentOid, middleParentOid, childOid, map);
     }
 
@@ -138,7 +138,7 @@ public class BasicLookupStrategyTests {
 
         // Let's empty the database to force acls retrieval from cache
         emptyDatabase();
-        Map map = this.strategy.readAclsById(new ObjectIdentity[] { topParentOid, middleParentOid, childOid }, null);
+        Map<ObjectIdentity, Acl> map = this.strategy.readAclsById(new ObjectIdentity[] { topParentOid, middleParentOid, childOid }, null);
 
         checkEntries(topParentOid, middleParentOid, childOid, map);
     }
@@ -151,12 +151,12 @@ public class BasicLookupStrategyTests {
 
         // Set a batch size to allow multiple database queries in order to retrieve all acls
         ((BasicLookupStrategy) this.strategy).setBatchSize(1);
-        Map map = this.strategy.readAclsById(new ObjectIdentity[] { topParentOid, middleParentOid, childOid }, null);
+        Map<ObjectIdentity, Acl> map = this.strategy.readAclsById(new ObjectIdentity[] { topParentOid, middleParentOid, childOid }, null);
         checkEntries(topParentOid, middleParentOid, childOid, map);
     }
 
-    private void checkEntries(ObjectIdentity topParentOid, ObjectIdentity middleParentOid, ObjectIdentity childOid, Map map)
-            throws Exception {
+    private void checkEntries(ObjectIdentity topParentOid, ObjectIdentity middleParentOid, ObjectIdentity childOid,
+            Map<ObjectIdentity, Acl> map) throws Exception {
         Assert.assertEquals(3, map.size());
 
         MutableAcl topParent = (MutableAcl) map.get(topParentOid);
@@ -221,20 +221,20 @@ public class BasicLookupStrategyTests {
         Assert.assertFalse(((AuditableAccessControlEntry) child.getEntries()[0]).isAuditSuccess());
         Assert.assertFalse((child.getEntries()[0]).isGranting());
     }
-    
+
     @Test
     public void testAllParentsAreRetrievedWhenChildIsLoaded() throws Exception {
         String query = "INSERT INTO acl_object_identity(ID,OBJECT_ID_CLASS,OBJECT_ID_IDENTITY,PARENT_OBJECT,OWNER_SID,ENTRIES_INHERITING) VALUES (4,2,103,1,1,1);";
         jdbcTemplate.execute(query);
-        
+
         ObjectIdentity topParentOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(100));
         ObjectIdentity middleParentOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Integer(101));
         ObjectIdentity childOid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(102));
         ObjectIdentity middleParent2Oid = new ObjectIdentityImpl("org.springframework.security.TargetObject", new Long(103));
-        
+
         // Retrieve the child
-        Map map = this.strategy.readAclsById(new ObjectIdentity[] { childOid }, null);
-        
+        Map<ObjectIdentity, Acl> map = this.strategy.readAclsById(new ObjectIdentity[] { childOid }, null);
+
         // Check that the child and all its parents were retrieved
         Assert.assertNotNull(map.get(childOid));
         Assert.assertEquals(childOid, ((Acl) map.get(childOid)).getObjectIdentity());
@@ -242,7 +242,7 @@ public class BasicLookupStrategyTests {
         Assert.assertEquals(middleParentOid, ((Acl) map.get(middleParentOid)).getObjectIdentity());
         Assert.assertNotNull(map.get(topParentOid));
         Assert.assertEquals(topParentOid, ((Acl) map.get(topParentOid)).getObjectIdentity());
-        
+
         // The second parent shouldn't have been retrieved
         Assert.assertNull(map.get(middleParent2Oid));
     }
@@ -268,9 +268,9 @@ public class BasicLookupStrategyTests {
         Permission[] checkPermission = new Permission[] { BasePermission.READ };
         Sid[] sids = new Sid[] { new PrincipalSid("ben") };
         ObjectIdentity[] childOids = new ObjectIdentity[] { childOid };
-        
+
         ((BasicLookupStrategy) this.strategy).setBatchSize(6);
-        Map foundAcls = strategy.readAclsById(childOids, sids);
+        Map<ObjectIdentity, Acl> foundAcls = strategy.readAclsById(childOids, sids);
 
         Acl foundChildAcl = (Acl) foundAcls.get(childOid);
         Assert.assertNotNull(foundChildAcl);
@@ -290,5 +290,5 @@ public class BasicLookupStrategyTests {
         Assert.assertNotNull(foundParent2Acl);
         Assert.assertTrue(foundParent2Acl.isGranted(checkPermission, sids, false));
     }
-    
-}
+
+}

+ 17 - 18
acl/src/test/java/org/springframework/security/acls/jdbc/EhCacheBasedAclCacheTests.java

@@ -68,11 +68,10 @@ public class EhCacheBasedAclCacheTests {
 
         return cache;
     }
-    
+
     @Test(expected=IllegalArgumentException.class)
     public void constructorRejectsNullParameters() throws Exception {
-        AclCache aclCache = new EhCacheBasedAclCache(null);
-        fail("It should have thrown IllegalArgumentException");
+        new EhCacheBasedAclCache(null);
     }
 
     @Test
@@ -125,7 +124,7 @@ public class EhCacheBasedAclCacheTests {
             assertTrue(true);
         }
     }
-    
+
     // SEC-527
     @Test
     public void testDiskSerializationOfMutableAclObjectInstance() throws Exception {
@@ -138,20 +137,20 @@ public class EhCacheBasedAclCacheTests {
         // Serialization test
         File file = File.createTempFile("SEC_TEST", ".object");
         FileOutputStream fos = new FileOutputStream(file);
-    	ObjectOutputStream oos = new ObjectOutputStream(fos);
-    	oos.writeObject(acl);
-    	oos.close();
-        
-    	FileInputStream fis = new FileInputStream(file);
-    	ObjectInputStream ois = new ObjectInputStream(fis);
-    	MutableAcl retrieved = (MutableAcl) ois.readObject();
-    	ois.close();
-    	
+        ObjectOutputStream oos = new ObjectOutputStream(fos);
+        oos.writeObject(acl);
+        oos.close();
+
+        FileInputStream fis = new FileInputStream(file);
+        ObjectInputStream ois = new ObjectInputStream(fis);
+        MutableAcl retrieved = (MutableAcl) ois.readObject();
+        ois.close();
+
         assertEquals(acl, retrieved);
-        
+
         Object retrieved1 = FieldUtils.getProtectedFieldValue("aclAuthorizationStrategy", retrieved);
         assertEquals(null, retrieved1);
-        
+
         Object retrieved2 = FieldUtils.getProtectedFieldValue("auditLogger", retrieved);
         assertEquals(null, retrieved2);
     }
@@ -173,7 +172,7 @@ public class EhCacheBasedAclCacheTests {
         assertEquals(2, cache.getDiskStoreSize());
         assertTrue(cache.isElementOnDisk(acl.getObjectIdentity()));
         assertFalse(cache.isElementInMemory(acl.getObjectIdentity()));
-        
+
         // Check we can get from cache the same objects we put in
         assertEquals(myCache.getFromCache(new Long(1)), acl);
         assertEquals(myCache.getFromCache(identity), acl);
@@ -208,7 +207,7 @@ public class EhCacheBasedAclCacheTests {
     public void cacheOperationsAclWithParent() throws Exception {
         Ehcache cache = getCache();
         EhCacheBasedAclCache myCache = new EhCacheBasedAclCache(cache);
-        
+
         Authentication auth = new TestingAuthenticationToken("user", "password", new GrantedAuthority[] {
                 new GrantedAuthorityImpl("ROLE_GENERAL") });
         auth.setAuthenticated(true);
@@ -221,7 +220,7 @@ public class EhCacheBasedAclCacheTests {
                 new GrantedAuthorityImpl("ROLE_GENERAL") });
         MutableAcl acl = new AclImpl(identity, new Long(1), aclAuthorizationStrategy, new ConsoleAuditLogger());
         MutableAcl parentAcl = new AclImpl(identityParent, new Long(2), aclAuthorizationStrategy, new ConsoleAuditLogger());
-        
+
         acl.setParent(parentAcl);
 
         assertEquals(0, cache.getDiskStoreSize());

+ 1 - 0
acl/src/test/java/org/springframework/security/acls/objectidentity/ObjectIdentityTests.java

@@ -163,6 +163,7 @@ public class ObjectIdentityTests {
         }
     }
 
+    @SuppressWarnings("unused")
     private class MockOtherIdDomainObject {
         private Object id;
 

+ 12 - 12
acl/src/test/java/org/springframework/security/acls/sid/SidTests.java

@@ -19,7 +19,7 @@ public class SidTests extends TestCase {
         // Check one String-argument constructor
         try {
             String string = null;
-            Sid principalSid = new PrincipalSid(string);
+            new PrincipalSid(string);
             Assert.fail("It should have thrown IllegalArgumentException");
         }
         catch (IllegalArgumentException expected) {
@@ -27,7 +27,7 @@ public class SidTests extends TestCase {
         }
 
         try {
-            Sid principalSid = new PrincipalSid("");
+            new PrincipalSid("");
             Assert.fail("It should have thrown IllegalArgumentException");
         }
         catch (IllegalArgumentException expected) {
@@ -35,7 +35,7 @@ public class SidTests extends TestCase {
         }
 
         try {
-            Sid principalSid = new PrincipalSid("johndoe");
+            new PrincipalSid("johndoe");
             Assert.assertTrue(true);
         }
         catch (IllegalArgumentException notExpected) {
@@ -45,7 +45,7 @@ public class SidTests extends TestCase {
         // Check one Authentication-argument constructor
         try {
             Authentication authentication = null;
-            Sid principalSid = new PrincipalSid(authentication);
+            new PrincipalSid(authentication);
             Assert.fail("It should have thrown IllegalArgumentException");
         }
         catch (IllegalArgumentException expected) {
@@ -54,7 +54,7 @@ public class SidTests extends TestCase {
 
         try {
             Authentication authentication = new TestingAuthenticationToken(null, "password");
-            Sid principalSid = new PrincipalSid(authentication);
+            new PrincipalSid(authentication);
             Assert.fail("It should have thrown IllegalArgumentException");
         }
         catch (IllegalArgumentException expected) {
@@ -63,7 +63,7 @@ public class SidTests extends TestCase {
 
         try {
             Authentication authentication = new TestingAuthenticationToken("johndoe", "password");
-            Sid principalSid = new PrincipalSid(authentication);
+            new PrincipalSid(authentication);
             Assert.assertTrue(true);
         }
         catch (IllegalArgumentException notExpected) {
@@ -75,7 +75,7 @@ public class SidTests extends TestCase {
         // Check one String-argument constructor
         try {
             String string = null;
-            Sid gaSid = new GrantedAuthoritySid(string);
+            new GrantedAuthoritySid(string);
             Assert.fail("It should have thrown IllegalArgumentException");
         }
         catch (IllegalArgumentException expected) {
@@ -83,7 +83,7 @@ public class SidTests extends TestCase {
         }
 
         try {
-            Sid gaSid = new GrantedAuthoritySid("");
+            new GrantedAuthoritySid("");
             Assert.fail("It should have thrown IllegalArgumentException");
         }
         catch (IllegalArgumentException expected) {
@@ -91,7 +91,7 @@ public class SidTests extends TestCase {
         }
 
         try {
-            Sid gaSid = new GrantedAuthoritySid("ROLE_TEST");
+            new GrantedAuthoritySid("ROLE_TEST");
             Assert.assertTrue(true);
         }
         catch (IllegalArgumentException notExpected) {
@@ -101,7 +101,7 @@ public class SidTests extends TestCase {
         // Check one GrantedAuthority-argument constructor
         try {
             GrantedAuthority ga = null;
-            Sid gaSid = new GrantedAuthoritySid(ga);
+            new GrantedAuthoritySid(ga);
             Assert.fail("It should have thrown IllegalArgumentException");
         }
         catch (IllegalArgumentException expected) {
@@ -110,7 +110,7 @@ public class SidTests extends TestCase {
 
         try {
             GrantedAuthority ga = new GrantedAuthorityImpl(null);
-            Sid gaSid = new GrantedAuthoritySid(ga);
+            new GrantedAuthoritySid(ga);
             Assert.fail("It should have thrown IllegalArgumentException");
         }
         catch (IllegalArgumentException expected) {
@@ -119,7 +119,7 @@ public class SidTests extends TestCase {
 
         try {
             GrantedAuthority ga = new GrantedAuthorityImpl("ROLE_TEST");
-            Sid gaSid = new GrantedAuthoritySid(ga);
+            new GrantedAuthoritySid(ga);
             Assert.assertTrue(true);
         }
         catch (IllegalArgumentException notExpected) {

+ 10 - 22
cas/src/main/java/org/springframework/security/providers/cas/CasAuthenticationProvider.java

@@ -18,32 +18,23 @@ package org.springframework.security.providers.cas;
 import org.jasig.cas.client.validation.Assertion;
 import org.jasig.cas.client.validation.TicketValidationException;
 import org.jasig.cas.client.validation.TicketValidator;
-import org.springframework.security.SpringSecurityMessageSource;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.context.MessageSource;
+import org.springframework.context.MessageSourceAware;
+import org.springframework.context.support.MessageSourceAccessor;
 import org.springframework.security.Authentication;
 import org.springframework.security.AuthenticationException;
 import org.springframework.security.BadCredentialsException;
-
+import org.springframework.security.SpringSecurityMessageSource;
 import org.springframework.security.providers.AuthenticationProvider;
 import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
 import org.springframework.security.providers.cas.cache.NullStatelessTicketCache;
-
 import org.springframework.security.ui.cas.CasProcessingFilter;
 import org.springframework.security.ui.cas.ServiceProperties;
-
 import org.springframework.security.userdetails.UserDetails;
-import org.springframework.security.userdetails.UserDetailsService;
 import org.springframework.security.userdetails.UserDetailsChecker;
+import org.springframework.security.userdetails.UserDetailsService;
 import org.springframework.security.userdetails.checker.AccountStatusUserDetailsChecker;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.springframework.beans.factory.InitializingBean;
-
-import org.springframework.context.MessageSource;
-import org.springframework.context.MessageSourceAware;
-import org.springframework.context.support.MessageSourceAccessor;
-
 import org.springframework.util.Assert;
 
 
@@ -60,9 +51,6 @@ import org.springframework.util.Assert;
  * @version $Id$
  */
 public class CasAuthenticationProvider implements AuthenticationProvider, InitializingBean, MessageSourceAware {
-    //~ Static fields/initializers =====================================================================================
-
-    private static final Log logger = LogFactory.getLog(CasAuthenticationProvider.class);
 
     //~ Instance fields ================================================================================================
 
@@ -144,17 +132,17 @@ public class CasAuthenticationProvider implements AuthenticationProvider, Initia
         try {
             final Assertion assertion = this.ticketValidator.validate(authentication.getCredentials().toString(), serviceProperties.getService());
             final UserDetails userDetails = loadUserByAssertion(assertion);
-            userDetailsChecker.check(userDetails);        
+            userDetailsChecker.check(userDetails);
             return new CasAuthenticationToken(this.key, userDetails, authentication.getCredentials(), userDetails.getAuthorities(), userDetails, assertion);
         } catch (final TicketValidationException e) {
             throw new BadCredentialsException(e.getMessage(), e);
         }
     }
-    
+
     /**
      * Template method for retrieving the UserDetails based on the assertion.  Default is to call configured userDetailsService and pass the username.  Deployers
      * can override this method and retrieve the user based on any criteria they desire.
-     * 
+     *
      * @param assertion The CAS Assertion.
      * @returns the UserDetails.
      */
@@ -169,7 +157,7 @@ public class CasAuthenticationProvider implements AuthenticationProvider, Initia
     public void setUserDetailsService(final UserDetailsService userDetailsService) {
         this.userDetailsService = userDetailsService;
     }
-    
+
     public void setServiceProperties(final ServiceProperties serviceProperties) {
         this.serviceProperties = serviceProperties;
     }

+ 24 - 24
cas/src/main/java/org/springframework/security/providers/cas/cache/NullStatelessTicketCache.java

@@ -33,31 +33,31 @@ import org.springframework.security.providers.cas.StatelessTicketCache;
  */
 public final class NullStatelessTicketCache implements StatelessTicketCache {
 
-	/**
-	 * @return null since we are not storing any tickets.
-	 */
-	public CasAuthenticationToken getByTicketId(final String serviceTicket) {
-		return null;
-	}
+    /**
+     * @return null since we are not storing any tickets.
+     */
+    public CasAuthenticationToken getByTicketId(final String serviceTicket) {
+        return null;
+    }
 
-	/**
-	 * This is a no-op since we are not storing tickets.
-	 */
-	public void putTicketInCache(final CasAuthenticationToken token) {
-		// nothing to do
-	}
+    /**
+     * This is a no-op since we are not storing tickets.
+     */
+    public void putTicketInCache(final CasAuthenticationToken token) {
+        // nothing to do
+    }
 
-	/**
-	 * This is a no-op since we are not storing tickets.
-	 */
-	public void removeTicketFromCache(final CasAuthenticationToken token) {
-		// nothing to do
-	}
+    /**
+     * This is a no-op since we are not storing tickets.
+     */
+    public void removeTicketFromCache(final CasAuthenticationToken token) {
+        // nothing to do
+    }
 
-	/**
-	 * This is a no-op since we are not storing tickets.
-	 */
-	public void removeTicketFromCache(final String serviceTicket) {
-		// nothing to do
-	}
+    /**
+     * This is a no-op since we are not storing tickets.
+     */
+    public void removeTicketFromCache(final String serviceTicket) {
+        // nothing to do
+    }
 }

+ 3 - 3
cas/src/main/java/org/springframework/security/ui/cas/CasProcessingFilterEntryPoint.java

@@ -60,13 +60,13 @@ public class CasProcessingFilterEntryPoint implements AuthenticationEntryPoint,
 
     //~ Methods ========================================================================================================
 
-	public void afterPropertiesSet() throws Exception {
+    public void afterPropertiesSet() throws Exception {
         Assert.hasLength(this.loginUrl, "loginUrl must be specified");
         Assert.notNull(this.serviceProperties, "serviceProperties must be specified");
     }
 
     public void commence(final HttpServletRequest servletRequest, final HttpServletResponse servletResponse,
-    		final AuthenticationException authenticationException) throws IOException, ServletException {
+            final AuthenticationException authenticationException) throws IOException, ServletException {
 
         final HttpServletResponse response = (HttpServletResponse) servletResponse;
         final String urlEncodedService = CommonUtils.constructServiceUrl(null, response, this.serviceProperties.getService(), null, "ticket", this.encodeServiceUrlWithSessionId);
@@ -98,6 +98,6 @@ public class CasProcessingFilterEntryPoint implements AuthenticationEntryPoint,
     }
 
     public void setEncodeServiceUrlWithSessionId(final boolean encodeServiceUrlWithSessionId) {
-    	this.encodeServiceUrlWithSessionId = encodeServiceUrlWithSessionId;
+        this.encodeServiceUrlWithSessionId = encodeServiceUrlWithSessionId;
     }
 }

+ 1 - 1
cas/src/main/java/org/springframework/security/ui/cas/ServiceProperties.java

@@ -38,7 +38,7 @@ public class ServiceProperties implements InitializingBean {
     //~ Methods ========================================================================================================
 
     public void afterPropertiesSet() throws Exception {
-    	Assert.hasLength(this.service, "service must be specified.");
+        Assert.hasLength(this.service, "service must be specified.");
     }
 
     /**

+ 11 - 10
cas/src/test/java/org/springframework/security/providers/cas/CasAuthenticationProviderTests.java

@@ -30,6 +30,7 @@ import org.springframework.security.ui.cas.ServiceProperties;
 import org.springframework.security.userdetails.User;
 import org.springframework.security.userdetails.UserDetails;
 import org.springframework.security.userdetails.UserDetailsService;
+import org.springframework.security.util.AuthorityUtils;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -54,12 +55,12 @@ public class CasAuthenticationProviderTests {
 
     private UserDetails makeUserDetails() {
         return new User("user", "password", true, true, true, true,
-            new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl("ROLE_TWO")});
+                AuthorityUtils.createAuthorityList("ROLE_ONE", "ROLE_TWO"));
     }
 
     private UserDetails makeUserDetailsFromAuthoritiesPopulator() {
         return new User("user", "password", true, true, true, true,
-            new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_A"), new GrantedAuthorityImpl("ROLE_B")});
+                AuthorityUtils.createAuthorityList("ROLE_A", "ROLE_B"));
     }
 
     private ServiceProperties makeServiceProperties() {
@@ -83,8 +84,8 @@ public class CasAuthenticationProviderTests {
         cap.setTicketValidator(new MockTicketValidator(true));
         cap.afterPropertiesSet();
 
-        UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(CasProcessingFilter.CAS_STATEFUL_IDENTIFIER,
-                "ST-123");
+        UsernamePasswordAuthenticationToken token =
+            new UsernamePasswordAuthenticationToken(CasProcessingFilter.CAS_STATEFUL_IDENTIFIER, "ST-123");
         token.setDetails("details");
 
         Authentication result = cap.authenticate(token);
@@ -124,8 +125,8 @@ public class CasAuthenticationProviderTests {
         cap.setServiceProperties(makeServiceProperties());
         cap.afterPropertiesSet();
 
-        UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(CasProcessingFilter.CAS_STATELESS_IDENTIFIER,
-                "ST-456");
+        UsernamePasswordAuthenticationToken token =
+            new UsernamePasswordAuthenticationToken(CasProcessingFilter.CAS_STATELESS_IDENTIFIER, "ST-456");
         token.setDetails("details");
 
         Authentication result = cap.authenticate(token);
@@ -183,7 +184,7 @@ public class CasAuthenticationProviderTests {
         cap.afterPropertiesSet();
 
         CasAuthenticationToken token = new CasAuthenticationToken("WRONG_KEY", makeUserDetails(), "credentials",
-                new GrantedAuthority[] {new GrantedAuthorityImpl("XX")}, makeUserDetails(), assertion);
+                AuthorityUtils.createAuthorityList("XX"), makeUserDetails(), assertion);
 
         cap.authenticate(token);
     }
@@ -275,7 +276,7 @@ public class CasAuthenticationProviderTests {
         cap.afterPropertiesSet();
 
         UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("some_normal_user",
-                "password", new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_A")});
+                "password", AuthorityUtils.createAuthorityList("ROLE_A"));
         assertEquals(null, cap.authenticate(token));
     }
 
@@ -295,10 +296,10 @@ public class CasAuthenticationProviderTests {
     }
 
     private class MockStatelessTicketCache implements StatelessTicketCache {
-        private Map cache = new HashMap();
+        private Map<String, CasAuthenticationToken> cache = new HashMap<String, CasAuthenticationToken>();
 
         public CasAuthenticationToken getByTicketId(String serviceTicket) {
-            return (CasAuthenticationToken) cache.get(serviceTicket);
+            return cache.get(serviceTicket);
         }
 
         public void putTicketInCache(CasAuthenticationToken token) {

+ 7 - 10
cas/src/test/java/org/springframework/security/providers/cas/cache/AbstractStatelessTicketCacheTests.java

@@ -5,31 +5,28 @@ import java.util.List;
 
 import org.jasig.cas.client.validation.Assertion;
 import org.jasig.cas.client.validation.AssertionImpl;
-import org.springframework.security.GrantedAuthority;
-import org.springframework.security.GrantedAuthorityImpl;
 import org.springframework.security.providers.cas.CasAuthenticationToken;
 import org.springframework.security.userdetails.User;
+import org.springframework.security.util.AuthorityUtils;
 
 /**
- * 
+ *
  * @author Scott Battaglia
- * @version $Revision$ $Date$
+ * @version $Id$
  * @since 2.0
  *
  */
 public abstract class AbstractStatelessTicketCacheTests {
-	
-	protected CasAuthenticationToken getToken() {
+
+    protected CasAuthenticationToken getToken() {
         List<String> proxyList = new ArrayList<String>();
         proxyList.add("https://localhost/newPortal/j_spring_cas_security_check");
 
-        User user = new User("rod", "password", true, true, true, true,
-                new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl("ROLE_TWO")});
+        User user = new User("rod", "password", true, true, true, true, AuthorityUtils.createAuthorityList("ROLE_ONE", "ROLE_TWO"));
         final Assertion assertion = new AssertionImpl("rod");
 
         return new CasAuthenticationToken("key", user, "ST-0-ER94xMJmn6pha35CQRoZ",
-            new GrantedAuthority[] {new GrantedAuthorityImpl("ROLE_ONE"), new GrantedAuthorityImpl("ROLE_TWO")}, user,
-            assertion);
+                AuthorityUtils.createAuthorityList("ROLE_ONE", "ROLE_TWO"), user, assertion);
     }
 
 }

+ 14 - 14
cas/src/test/java/org/springframework/security/providers/cas/cache/NullStatelessTicketCacheTests.java

@@ -30,18 +30,18 @@ import static org.junit.Assert.*;
  */
 public class NullStatelessTicketCacheTests extends AbstractStatelessTicketCacheTests {
 
-	private StatelessTicketCache cache = new NullStatelessTicketCache();
-	
-	@Test
-	public void testGetter() {
-		assertNull(cache.getByTicketId(null));
-		assertNull(cache.getByTicketId("test"));
-	}
-	
-	@Test
-	public void testInsertAndGet() {
-		final CasAuthenticationToken token = getToken();
-		cache.putTicketInCache(token);
-		assertNull(cache.getByTicketId((String) token.getCredentials()));
-	}
+    private StatelessTicketCache cache = new NullStatelessTicketCache();
+    
+    @Test
+    public void testGetter() {
+        assertNull(cache.getByTicketId(null));
+        assertNull(cache.getByTicketId("test"));
+    }
+    
+    @Test
+    public void testInsertAndGet() {
+        final CasAuthenticationToken token = getToken();
+        cache.putTicketInCache(token);
+        assertNull(cache.getByTicketId((String) token.getCredentials()));
+    }
 }

+ 0 - 3
core/src/main/java/org/springframework/security/GrantedAuthority.java

@@ -26,13 +26,10 @@ import org.springframework.security.userdetails.UserDetails;
  * A <code>GrantedAuthority</code> must either represent itself as a
  * <code>String</code> or be specifically supported by an  {@link
  * AccessDecisionManager}.
- * </p>
- * 
  * <p>
  * Implementations must implement {@link Comparable} in order to ensure that
  * array sorting logic guaranteed by {@link UserDetails#getAuthorities()} can
  * be reliably implemented.
- * </p>
  *
  * @author Ben Alex
  * @version $Id$

+ 12 - 12
core/src/main/java/org/springframework/security/GrantedAuthorityImpl.java

@@ -73,16 +73,16 @@ public class GrantedAuthorityImpl implements GrantedAuthority, Serializable {
         return this.role;
     }
 
-	public int compareTo(Object o) {
-		if (o != null && o instanceof GrantedAuthority) {
-			String rhsRole = ((GrantedAuthority) o).getAuthority();
-			
-			if (rhsRole == null) {
-				return -1;
-			}
-			
-			return role.compareTo(rhsRole);
-		}
-		return -1;
-	}
+    public int compareTo(Object o) {
+        if (o != null && o instanceof GrantedAuthority) {
+            String rhsRole = ((GrantedAuthority) o).getAuthority();
+            
+            if (rhsRole == null) {
+                return -1;
+            }
+            
+            return role.compareTo(rhsRole);
+        }
+        return -1;
+    }
 }

+ 3 - 3
core/src/main/java/org/springframework/security/concurrent/ConcurrentSessionControllerImpl.java

@@ -159,7 +159,7 @@ public class ConcurrentSessionControllerImpl implements ConcurrentSessionControl
         this.sessionRegistry = sessionRegistry;
     }
 
-	public SessionRegistry getSessionRegistry() {
-		return sessionRegistry;
-	}
+    public SessionRegistry getSessionRegistry() {
+        return sessionRegistry;
+    }
 }

+ 0 - 1
core/src/main/java/org/springframework/security/concurrent/ConcurrentSessionFilter.java

@@ -24,7 +24,6 @@ import org.springframework.security.ui.logout.SecurityContextLogoutHandler;
 import org.springframework.security.util.UrlUtils;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.util.Assert;
-import org.springframework.util.StringUtils;
 
 import javax.servlet.FilterChain;
 import javax.servlet.ServletException;

+ 39 - 39
core/src/main/java/org/springframework/security/config/AbstractUserDetailsServiceBeanDefinitionParser.java

@@ -17,45 +17,45 @@ import org.w3c.dom.Element;
  * @version $Id$
  */
 public abstract class AbstractUserDetailsServiceBeanDefinitionParser implements BeanDefinitionParser {
-	private static final String CACHE_REF = "cache-ref";
-	public static final String CACHING_SUFFIX = ".caching";
-	
-	/**  UserDetailsService bean Id. For use in a stateful context (i.e. in AuthenticationProviderBDP) */
-	private String id;
-	
-	protected abstract String getBeanClassName(Element element);
-	
-    protected abstract void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder);	
-	
-	public BeanDefinition parse(Element element, ParserContext parserContext) {
-		BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(getBeanClassName(element)); 
-		
-		doParse(element, parserContext, builder);
-		
-		RootBeanDefinition userService = (RootBeanDefinition) builder.getBeanDefinition();
-		String beanId = resolveId(element, userService, parserContext);
-		
-		parserContext.getRegistry().registerBeanDefinition(beanId, userService);
-		
-		String cacheRef = element.getAttribute(CACHE_REF);
-		
-		// Register a caching version of the user service if there's a cache-ref
-		if (StringUtils.hasText(cacheRef)) {
-			BeanDefinitionBuilder cachingUSBuilder = BeanDefinitionBuilder.rootBeanDefinition(CachingUserDetailsService.class);
-			cachingUSBuilder.addConstructorArgReference(beanId);
-			
-			cachingUSBuilder.addPropertyValue("userCache", new RuntimeBeanReference(cacheRef));
-			BeanDefinition cachingUserService = cachingUSBuilder.getBeanDefinition();
-			parserContext.getRegistry().registerBeanDefinition(beanId + CACHING_SUFFIX, cachingUserService);			
-		}
+    private static final String CACHE_REF = "cache-ref";
+    public static final String CACHING_SUFFIX = ".caching";
+    
+    /**  UserDetailsService bean Id. For use in a stateful context (i.e. in AuthenticationProviderBDP) */
+    private String id;
+    
+    protected abstract String getBeanClassName(Element element);
+    
+    protected abstract void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder);    
+    
+    public BeanDefinition parse(Element element, ParserContext parserContext) {
+        BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(getBeanClassName(element)); 
+        
+        doParse(element, parserContext, builder);
+        
+        RootBeanDefinition userService = (RootBeanDefinition) builder.getBeanDefinition();
+        String beanId = resolveId(element, userService, parserContext);
+        
+        parserContext.getRegistry().registerBeanDefinition(beanId, userService);
+        
+        String cacheRef = element.getAttribute(CACHE_REF);
+        
+        // Register a caching version of the user service if there's a cache-ref
+        if (StringUtils.hasText(cacheRef)) {
+            BeanDefinitionBuilder cachingUSBuilder = BeanDefinitionBuilder.rootBeanDefinition(CachingUserDetailsService.class);
+            cachingUSBuilder.addConstructorArgReference(beanId);
+            
+            cachingUSBuilder.addPropertyValue("userCache", new RuntimeBeanReference(cacheRef));
+            BeanDefinition cachingUserService = cachingUSBuilder.getBeanDefinition();
+            parserContext.getRegistry().registerBeanDefinition(beanId + CACHING_SUFFIX, cachingUserService);            
+        }
 
-		id = beanId;
-		
-		return null;
-	}
+        id = beanId;
+        
+        return null;
+    }
 
     private String resolveId(Element element, AbstractBeanDefinition definition, ParserContext parserContext) 
-    		throws BeanDefinitionStoreException {
+            throws BeanDefinitionStoreException {
 
         String id = element.getAttribute("id");
 
@@ -76,7 +76,7 @@ public abstract class AbstractUserDetailsServiceBeanDefinitionParser implements
         return BeanIds.USER_DETAILS_SERVICE;
     }
 
-	String getId() {
-		return id;
-	}
+    String getId() {
+        return id;
+    }
 }

+ 9 - 9
core/src/main/java/org/springframework/security/config/AuthenticationManagerBeanDefinitionParser.java

@@ -19,11 +19,11 @@ import org.w3c.dom.Element;
  */
 public class AuthenticationManagerBeanDefinitionParser implements BeanDefinitionParser {
     private static final String ATT_SESSION_CONTROLLER_REF = "session-controller-ref";
-	private static final String ATT_ALIAS = "alias";
+    private static final String ATT_ALIAS = "alias";
 
     public BeanDefinition parse(Element element, ParserContext parserContext) {
-    	ConfigUtils.registerProviderManagerIfNecessary(parserContext);
-    	
+        ConfigUtils.registerProviderManagerIfNecessary(parserContext);
+        
         String alias = element.getAttribute(ATT_ALIAS);
 
         if (!StringUtils.hasText(alias)) {
@@ -33,16 +33,16 @@ public class AuthenticationManagerBeanDefinitionParser implements BeanDefinition
         String sessionControllerRef = element.getAttribute(ATT_SESSION_CONTROLLER_REF);
         
         if (StringUtils.hasText(sessionControllerRef)) {
-        	BeanDefinition authManager = parserContext.getRegistry().getBeanDefinition(BeanIds.AUTHENTICATION_MANAGER);
+            BeanDefinition authManager = parserContext.getRegistry().getBeanDefinition(BeanIds.AUTHENTICATION_MANAGER);
             ConfigUtils.setSessionControllerOnAuthenticationManager(parserContext, 
-            		BeanIds.CONCURRENT_SESSION_CONTROLLER, element);
-        	authManager.getPropertyValues().addPropertyValue("sessionController", 
-        			new RuntimeBeanReference(sessionControllerRef));
+                    BeanIds.CONCURRENT_SESSION_CONTROLLER, element);
+            authManager.getPropertyValues().addPropertyValue("sessionController", 
+                    new RuntimeBeanReference(sessionControllerRef));
             RootBeanDefinition sessionRegistryInjector = new RootBeanDefinition(SessionRegistryInjectionBeanPostProcessor.class);
             sessionRegistryInjector.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
             sessionRegistryInjector.getConstructorArgumentValues().addGenericArgumentValue(sessionControllerRef);
-        	
-        	parserContext.getRegistry().registerBeanDefinition(BeanIds.SESSION_REGISTRY_INJECTION_POST_PROCESSOR, sessionRegistryInjector);
+            
+            parserContext.getRegistry().registerBeanDefinition(BeanIds.SESSION_REGISTRY_INJECTION_POST_PROCESSOR, sessionRegistryInjector);
         }
 
         parserContext.getRegistry().registerAlias(BeanIds.AUTHENTICATION_MANAGER, alias);

+ 21 - 21
core/src/main/java/org/springframework/security/config/BasicAuthenticationBeanDefinitionParser.java

@@ -20,30 +20,30 @@ import org.w3c.dom.Element;
  * @version $Id$
  */
 public class BasicAuthenticationBeanDefinitionParser implements BeanDefinitionParser {
-	private String realmName;
+    private String realmName;
 
-	public BasicAuthenticationBeanDefinitionParser(String realmName) {
-		this.realmName = realmName;
-	}
+    public BasicAuthenticationBeanDefinitionParser(String realmName) {
+        this.realmName = realmName;
+    }
 
-	public BeanDefinition parse(Element elt, ParserContext parserContext) {
+    public BeanDefinition parse(Element elt, ParserContext parserContext) {
         BeanDefinitionBuilder filterBuilder = BeanDefinitionBuilder.rootBeanDefinition(BasicProcessingFilter.class);
-	    RootBeanDefinition entryPoint = new RootBeanDefinition(BasicProcessingFilterEntryPoint.class);
-	    entryPoint.setSource(parserContext.extractSource(elt));
-	    entryPoint.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
-	    
-	    entryPoint.getPropertyValues().addPropertyValue("realmName", realmName);
-	
-	    parserContext.getRegistry().registerBeanDefinition(BeanIds.BASIC_AUTHENTICATION_ENTRY_POINT, entryPoint);
+        RootBeanDefinition entryPoint = new RootBeanDefinition(BasicProcessingFilterEntryPoint.class);
+        entryPoint.setSource(parserContext.extractSource(elt));
+        entryPoint.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
+        
+        entryPoint.getPropertyValues().addPropertyValue("realmName", realmName);
+    
+        parserContext.getRegistry().registerBeanDefinition(BeanIds.BASIC_AUTHENTICATION_ENTRY_POINT, entryPoint);
 
-	    filterBuilder.addPropertyValue("authenticationManager", new RuntimeBeanReference(BeanIds.AUTHENTICATION_MANAGER));
-	    filterBuilder.addPropertyValue("authenticationEntryPoint", new RuntimeBeanReference(BeanIds.BASIC_AUTHENTICATION_ENTRY_POINT));
+        filterBuilder.addPropertyValue("authenticationManager", new RuntimeBeanReference(BeanIds.AUTHENTICATION_MANAGER));
+        filterBuilder.addPropertyValue("authenticationEntryPoint", new RuntimeBeanReference(BeanIds.BASIC_AUTHENTICATION_ENTRY_POINT));
 
-	    parserContext.getRegistry().registerBeanDefinition(BeanIds.BASIC_AUTHENTICATION_FILTER,
-	            filterBuilder.getBeanDefinition());
-	    ConfigUtils.addHttpFilter(parserContext, new RuntimeBeanReference(BeanIds.BASIC_AUTHENTICATION_FILTER));
-	    parserContext.registerComponent(new BeanComponentDefinition(filterBuilder.getBeanDefinition(), 
-	    		BeanIds.BASIC_AUTHENTICATION_FILTER));
-	    return null;
-	}
+        parserContext.getRegistry().registerBeanDefinition(BeanIds.BASIC_AUTHENTICATION_FILTER,
+                filterBuilder.getBeanDefinition());
+        ConfigUtils.addHttpFilter(parserContext, new RuntimeBeanReference(BeanIds.BASIC_AUTHENTICATION_FILTER));
+        parserContext.registerComponent(new BeanComponentDefinition(filterBuilder.getBeanDefinition(), 
+                BeanIds.BASIC_AUTHENTICATION_FILTER));
+        return null;
+    }
 }

+ 25 - 25
core/src/main/java/org/springframework/security/config/CachingUserDetailsService.java

@@ -12,33 +12,33 @@ import org.springframework.util.Assert;
  * @since 2.0
  */
 class CachingUserDetailsService implements UserDetailsService {
-	private UserCache userCache = new NullUserCache();
-	private UserDetailsService delegate;
+    private UserCache userCache = new NullUserCache();
+    private UserDetailsService delegate;
 
-	CachingUserDetailsService(UserDetailsService delegate) {
-		this.delegate = delegate;
-	}
+    CachingUserDetailsService(UserDetailsService delegate) {
+        this.delegate = delegate;
+    }
 
-	public UserCache getUserCache() {
-		return userCache;
-	}
+    public UserCache getUserCache() {
+        return userCache;
+    }
 
-	public void setUserCache(UserCache userCache) {
-		this.userCache = userCache;
-	}
+    public void setUserCache(UserCache userCache) {
+        this.userCache = userCache;
+    }
 
-	public UserDetails loadUserByUsername(String username) {
-		UserDetails user = userCache.getUserFromCache(username);
-		
-		if (user == null) {
-			user = delegate.loadUserByUsername(username);
-		}
-		
-		Assert.notNull(user, "UserDetailsService " + delegate + " returned null for username " + username + ". " +
-				"This is an interface contract violation");
-		
-		userCache.putUserInCache(user);
-		
-		return user;
-	}
+    public UserDetails loadUserByUsername(String username) {
+        UserDetails user = userCache.getUserFromCache(username);
+        
+        if (user == null) {
+            user = delegate.loadUserByUsername(username);
+        }
+        
+        Assert.notNull(user, "UserDetailsService " + delegate + " returned null for username " + username + ". " +
+                "This is an interface contract violation");
+        
+        userCache.putUserInCache(user);
+        
+        return user;
+    }
 }

+ 2 - 0
core/src/main/java/org/springframework/security/config/ConfigUtils.java

@@ -87,11 +87,13 @@ abstract class ConfigUtils {
         ((ArrayList) authManager.getPropertyValues().getPropertyValue("providerBeanNames").getValue()).add(beanName);
     }
 
+    @SuppressWarnings("unchecked")
     static ManagedList getRegisteredAfterInvocationProviders(ParserContext parserContext) {
         BeanDefinition manager = registerAfterInvocationProviderManagerIfNecessary(parserContext);
         return (ManagedList) manager.getPropertyValues().getPropertyValue("providers").getValue();
     }
 
+    @SuppressWarnings("unchecked")
     private static BeanDefinition registerAfterInvocationProviderManagerIfNecessary(ParserContext parserContext) {
         if(parserContext.getRegistry().containsBeanDefinition(BeanIds.AFTER_INVOCATION_MANAGER)) {
             return parserContext.getRegistry().getBeanDefinition(BeanIds.AFTER_INVOCATION_MANAGER);

+ 0 - 1
core/src/main/java/org/springframework/security/config/FilterInvocationDefinitionSourceBeanDefinitionParser.java

@@ -27,7 +27,6 @@ public class FilterInvocationDefinitionSourceBeanDefinitionParser extends Abstra
         return "org.springframework.security.intercept.web.DefaultFilterInvocationDefinitionSource";
     }
 
-    @SuppressWarnings("unchecked")
     protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
         List<Element> interceptUrls = DomUtils.getChildElementsByTagName(element, "intercept-url");
 

+ 1 - 0
core/src/main/java/org/springframework/security/config/GlobalMethodSecurityBeanDefinitionParser.java

@@ -166,6 +166,7 @@ class GlobalMethodSecurityBeanDefinitionParser implements BeanDefinitionParser {
         pc.getRegistry().registerBeanDefinition(ACCESS_MANAGER_ID, accessMgrBuilder.getBeanDefinition());
     }
 
+    @SuppressWarnings("unchecked")
     private void registerDelegatingMethodDefinitionSource(ParserContext parserContext, ManagedList delegates, Object source) {
         if (parserContext.getRegistry().containsBeanDefinition(DELEGATING_METHOD_DEFINITION_SOURCE_ID)) {
             parserContext.getReaderContext().error("Duplicate <global-method-security> detected.", source);

+ 0 - 1
core/src/main/java/org/springframework/security/config/InterceptMethodsBeanDefinitionDecorator.java

@@ -42,7 +42,6 @@ class InternalInterceptMethodsBeanDefinitionDecorator extends AbstractIntercepto
     static final String ATT_ACCESS = "access";
     private static final String ATT_ACCESS_MGR = "access-decision-manager-ref";
 
-    @SuppressWarnings("unchecked")
     protected BeanDefinition createInterceptorDefinition(Node node) {
         Element interceptMethodsElt = (Element)node;
         BeanDefinitionBuilder interceptor = BeanDefinitionBuilder.rootBeanDefinition(MethodSecurityInterceptor.class);

+ 5 - 5
core/src/main/java/org/springframework/security/config/JdbcUserServiceBeanDefinitionParser.java

@@ -11,11 +11,11 @@ import org.w3c.dom.Element;
  * @version $Id$
  */
 public class JdbcUserServiceBeanDefinitionParser extends AbstractUserDetailsServiceBeanDefinitionParser {
-	static final String ATT_DATA_SOURCE = "data-source-ref";
-	static final String ATT_USERS_BY_USERNAME_QUERY = "users-by-username-query";
-	static final String ATT_AUTHORITIES_BY_USERNAME_QUERY = "authorities-by-username-query";
-	static final String ATT_GROUP_AUTHORITIES_QUERY = "group-authorities-by-username-query";
-	static final String ATT_ROLE_PREFIX = "role-prefix";
+    static final String ATT_DATA_SOURCE = "data-source-ref";
+    static final String ATT_USERS_BY_USERNAME_QUERY = "users-by-username-query";
+    static final String ATT_AUTHORITIES_BY_USERNAME_QUERY = "authorities-by-username-query";
+    static final String ATT_GROUP_AUTHORITIES_QUERY = "group-authorities-by-username-query";
+    static final String ATT_ROLE_PREFIX = "role-prefix";
 
     protected String getBeanClassName(Element element) {
         return "org.springframework.security.userdetails.jdbc.JdbcUserDetailsManager";

+ 2 - 2
core/src/main/java/org/springframework/security/config/SecurityNamespaceHandler.java

@@ -14,8 +14,8 @@ public class SecurityNamespaceHandler extends NamespaceHandlerSupport {
 
     public void init() {
         // Parsers
-    	registerBeanDefinitionParser(Elements.LDAP_PROVIDER, new LdapProviderBeanDefinitionParser());
-    	registerBeanDefinitionParser(Elements.LDAP_SERVER, new LdapServerBeanDefinitionParser());
+        registerBeanDefinitionParser(Elements.LDAP_PROVIDER, new LdapProviderBeanDefinitionParser());
+        registerBeanDefinitionParser(Elements.LDAP_SERVER, new LdapServerBeanDefinitionParser());
         registerBeanDefinitionParser(Elements.LDAP_USER_SERVICE, new LdapUserServiceBeanDefinitionParser());
         registerBeanDefinitionParser(Elements.HTTP, new HttpSecurityBeanDefinitionParser());
         registerBeanDefinitionParser(Elements.USER_SERVICE, new UserServiceBeanDefinitionParser());

+ 1 - 2
core/src/main/java/org/springframework/security/config/SessionRegistryInjectionBeanPostProcessor.java

@@ -56,7 +56,6 @@ class SessionRegistryInjectionBeanPostProcessor implements BeanPostProcessor, Be
         return bean;
     }
 
-    @SuppressWarnings("unchecked")
     private SessionRegistry getSessionRegistry() {
         if (sessionRegistry != null) {
             return sessionRegistry;
@@ -84,7 +83,7 @@ class SessionRegistryInjectionBeanPostProcessor implements BeanPostProcessor, Be
             logger.warn("More than one SessionRegistry instance in application context. Possible configuration errors may result.");
         }
 
-        sessionRegistry = (SessionRegistry) sessionRegs.get(0);
+        sessionRegistry = sessionRegs.get(0);
 
         return sessionRegistry;
     }

+ 3 - 3
core/src/main/java/org/springframework/security/event/authentication/InteractiveAuthenticationSuccessEvent.java

@@ -30,11 +30,11 @@ import org.springframework.util.Assert;
 public class InteractiveAuthenticationSuccessEvent extends AbstractAuthenticationEvent {
     //~ Instance fields ================================================================================================
 
-    private Class generatedBy;
+    private Class<?> generatedBy;
 
     //~ Constructors ===================================================================================================
 
-    public InteractiveAuthenticationSuccessEvent(Authentication authentication, Class generatedBy) {
+    public InteractiveAuthenticationSuccessEvent(Authentication authentication, Class<?> generatedBy) {
         super(authentication);
         Assert.notNull(generatedBy);
         this.generatedBy = generatedBy;
@@ -48,7 +48,7 @@ public class InteractiveAuthenticationSuccessEvent extends AbstractAuthenticatio
      *
      * @return the class
      */
-    public Class getGeneratedBy() {
+    public Class<?> getGeneratedBy() {
         return generatedBy;
     }
 }

+ 11 - 10
core/src/main/java/org/springframework/security/event/authentication/LoggerListener.java

@@ -23,8 +23,9 @@ import org.springframework.util.ClassUtils;
 
 
 /**
- * Outputs authentication-related application events to Commons Logging.<P>All authentication events are logged at
- * the warning level.</p>
+ * Outputs authentication-related application events to Commons Logging.
+ * <p>
+ * All authentication events are logged at the warning level.
  *
  * @author Ben Alex
  * @version $Id$
@@ -44,7 +45,7 @@ public class LoggerListener implements ApplicationListener {
             AbstractAuthenticationEvent authEvent = (AbstractAuthenticationEvent) event;
 
             if (!logInteractiveAuthenticationSuccessEvents && authEvent instanceof InteractiveAuthenticationSuccessEvent) {
-            	return;
+                return;
             }
 
             if (logger.isWarnEnabled()) {
@@ -62,12 +63,12 @@ public class LoggerListener implements ApplicationListener {
         }
     }
 
-	public boolean isLogInteractiveAuthenticationSuccessEvents() {
-		return logInteractiveAuthenticationSuccessEvents;
-	}
+    public boolean isLogInteractiveAuthenticationSuccessEvents() {
+        return logInteractiveAuthenticationSuccessEvents;
+    }
 
-	public void setLogInteractiveAuthenticationSuccessEvents(
-			boolean logInteractiveAuthenticationSuccessEvents) {
-		this.logInteractiveAuthenticationSuccessEvents = logInteractiveAuthenticationSuccessEvents;
-	}
+    public void setLogInteractiveAuthenticationSuccessEvents(
+            boolean logInteractiveAuthenticationSuccessEvents) {
+        this.logInteractiveAuthenticationSuccessEvents = logInteractiveAuthenticationSuccessEvents;
+    }
 }

+ 6 - 7
core/src/main/java/org/springframework/security/intercept/method/MapBasedMethodDefinitionSource.java

@@ -20,7 +20,6 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -88,7 +87,7 @@ public class MapBasedMethodDefinitionSource extends AbstractFallbackMethodDefini
         return findAttributesSpecifiedAgainst(method, targetClass);
     }
 
-    private List<ConfigAttribute> findAttributesSpecifiedAgainst(Method method, Class clazz) {
+    private List<ConfigAttribute> findAttributesSpecifiedAgainst(Method method, Class<?> clazz) {
         RegisteredMethod registeredMethod = new RegisteredMethod(method, clazz);
         if (methodMap.containsKey(registeredMethod)) {
             return (List<ConfigAttribute>) methodMap.get(registeredMethod);
@@ -118,7 +117,7 @@ public class MapBasedMethodDefinitionSource extends AbstractFallbackMethodDefini
         Assert.hasText(methodName, "Method not found for '" + name + "'");
 
         String typeName = name.substring(0, lastDotIndex);
-        Class type = ClassUtils.resolveClassName(typeName, this.beanClassLoader);
+        Class<?> type = ClassUtils.resolveClassName(typeName, this.beanClassLoader);
 
         addSecureMethod(type, methodName, attr);
     }
@@ -131,7 +130,7 @@ public class MapBasedMethodDefinitionSource extends AbstractFallbackMethodDefini
      * @param mappedName mapped method name, which the javaType has declared or inherited
      * @param attr required authorities associated with the method
      */
-    public void addSecureMethod(Class javaType, String mappedName, List<ConfigAttribute> attr) {
+    public void addSecureMethod(Class<?> javaType, String mappedName, List<ConfigAttribute> attr) {
         String name = javaType.getName() + '.' + mappedName;
 
         if (logger.isDebugEnabled()) {
@@ -179,7 +178,7 @@ public class MapBasedMethodDefinitionSource extends AbstractFallbackMethodDefini
      * the existing match will be retained, so that if this method is called for a more general pointcut
      * it will not override a more specific one which has already been added. This
      */
-    public void addSecureMethod(Class javaType, Method method, List<ConfigAttribute> attr) {
+    public void addSecureMethod(Class<?> javaType, Method method, List<ConfigAttribute> attr) {
         RegisteredMethod key = new RegisteredMethod(method, javaType);
 
         if (methodMap.containsKey(key)) {
@@ -255,9 +254,9 @@ public class MapBasedMethodDefinitionSource extends AbstractFallbackMethodDefini
      */
     private class RegisteredMethod {
         private Method method;
-        private Class registeredJavaType;
+        private Class<?> registeredJavaType;
 
-        public RegisteredMethod(Method method, Class registeredJavaType) {
+        public RegisteredMethod(Method method, Class<?> registeredJavaType) {
             Assert.notNull(method, "Method required");
             Assert.notNull(registeredJavaType, "Registered Java Type required");
             this.method = method;

+ 9 - 17
core/src/main/java/org/springframework/security/intercept/method/MethodDefinitionSourceEditor.java

@@ -15,23 +15,18 @@
 
 package org.springframework.security.intercept.method;
 
-import org.springframework.security.ConfigAttribute;
-import org.springframework.security.SecurityConfig;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.springframework.beans.propertyeditors.PropertiesEditor;
-import org.springframework.util.StringUtils;
-
 import java.beans.PropertyEditorSupport;
-
 import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.LinkedHashMap;
 import java.util.List;
-import java.util.Properties;
 import java.util.Map;
-import java.util.LinkedHashMap;
+import java.util.Properties;
+
+import org.springframework.beans.propertyeditors.PropertiesEditor;
+import org.springframework.security.ConfigAttribute;
+import org.springframework.security.SecurityConfig;
+import org.springframework.util.StringUtils;
 
 
 /**
@@ -44,12 +39,9 @@ import java.util.LinkedHashMap;
  * @version $Id$
  */
 public class MethodDefinitionSourceEditor extends PropertyEditorSupport {
-    //~ Static fields/initializers =====================================================================================
-
-    private static final Log logger = LogFactory.getLog(MethodDefinitionSourceEditor.class);
-
     //~ Methods ========================================================================================================
 
+    @SuppressWarnings("unchecked")
     public void setAsText(String s) throws IllegalArgumentException {
         if ((s == null) || "".equals(s)) {
             setValue(new MapBasedMethodDefinitionSource());
@@ -63,7 +55,7 @@ public class MethodDefinitionSourceEditor extends PropertyEditorSupport {
         Properties props = (Properties) propertiesEditor.getValue();
 
         // Now we have properties, process each one individually
-        Map mappings = new LinkedHashMap();
+        Map<String, List<ConfigAttribute>> mappings = new LinkedHashMap<String, List<ConfigAttribute>>();
 
         for (Iterator iter = props.keySet().iterator(); iter.hasNext();) {
             String name = (String) iter.next();

+ 13 - 26
core/src/main/java/org/springframework/security/intercept/method/ProtectPointcutPostProcessor.java

@@ -2,7 +2,6 @@ package org.springframework.security.intercept.method;
 
 import java.lang.reflect.Method;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -29,25 +28,18 @@ import org.springframework.util.StringUtils;
  * having every method of every bean defined in the Spring application context compared with
  * those pointcuts. Where a match is found, the matching method will be registered with the
  * {@link MapBasedMethodDefinitionSource}.
- * </p>
- *
  * <p>
  * It is very important to understand that only the <b>first</b> pointcut that matches a given
  * method will be taken as authoritative for that method. This is why pointcuts should be provided
  * as a <tt>LinkedHashMap</tt>, because their order is very important.
- * </p>
- *
  * <p>
  * Note also that only beans defined in the Spring application context will be examined by this
  * class.
- * </p>
- *
  * <p>
  * Because this class registers method security metadata with {@link MapBasedMethodDefinitionSource},
  * normal Spring Security capabilities such as {@link MethodDefinitionSourceAdvisor} can be used.
  * It does not matter the fact the method metadata was originally obtained from an AspectJ pointcut
  * expression evaluation.
- * </p>
  *
  * @author Ben Alex
  * @verion $Id$
@@ -58,7 +50,7 @@ public final class ProtectPointcutPostProcessor implements BeanPostProcessor {
 
     private static final Log logger = LogFactory.getLog(ProtectPointcutPostProcessor.class);
 
-    private Map<String,List<ConfigAttribute>> pointcutMap = new LinkedHashMap();
+    private Map<String,List<ConfigAttribute>> pointcutMap = new LinkedHashMap<String,List<ConfigAttribute>>();
     private MapBasedMethodDefinitionSource mapBasedMethodDefinitionSource;
     private PointcutParser parser;
 
@@ -66,18 +58,18 @@ public final class ProtectPointcutPostProcessor implements BeanPostProcessor {
         Assert.notNull(mapBasedMethodDefinitionSource, "MapBasedMethodDefinitionSource to populate is required");
         this.mapBasedMethodDefinitionSource = mapBasedMethodDefinitionSource;
 
-        // Setup AspectJ pointcut expression parser
-        Set supportedPrimitives = new HashSet();
+        // Set up AspectJ pointcut expression parser
+        Set<PointcutPrimitive> supportedPrimitives = new HashSet<PointcutPrimitive>(3);
         supportedPrimitives.add(PointcutPrimitive.EXECUTION);
         supportedPrimitives.add(PointcutPrimitive.ARGS);
         supportedPrimitives.add(PointcutPrimitive.REFERENCE);
-//		supportedPrimitives.add(PointcutPrimitive.THIS);
-//		supportedPrimitives.add(PointcutPrimitive.TARGET);
-//		supportedPrimitives.add(PointcutPrimitive.WITHIN);
-//		supportedPrimitives.add(PointcutPrimitive.AT_ANNOTATION);
-//		supportedPrimitives.add(PointcutPrimitive.AT_WITHIN);
-//		supportedPrimitives.add(PointcutPrimitive.AT_ARGS);
-//		supportedPrimitives.add(PointcutPrimitive.AT_TARGET);
+//        supportedPrimitives.add(PointcutPrimitive.THIS);
+//        supportedPrimitives.add(PointcutPrimitive.TARGET);
+//        supportedPrimitives.add(PointcutPrimitive.WITHIN);
+//        supportedPrimitives.add(PointcutPrimitive.AT_ANNOTATION);
+//        supportedPrimitives.add(PointcutPrimitive.AT_WITHIN);
+//        supportedPrimitives.add(PointcutPrimitive.AT_ARGS);
+//        supportedPrimitives.add(PointcutPrimitive.AT_TARGET);
         parser = PointcutParser.getPointcutParserSupportingSpecifiedPrimitivesAndUsingContextClassloaderForResolution(supportedPrimitives);
     }
 
@@ -96,10 +88,7 @@ public final class ProtectPointcutPostProcessor implements BeanPostProcessor {
 
         // Check to see if any of those methods are compatible with our pointcut expressions
         for (int i = 0; i < methods.length; i++) {
-            Iterator iter = pointcutMap.keySet().iterator();
-            while (iter.hasNext()) {
-                String ex = iter.next().toString();
-
+            for (String ex : pointcutMap.keySet()) {
                 // Parse the presented AspectJ pointcut expression
                 PointcutExpression expression = parser.parsePointcutExpression(ex);
 
@@ -114,7 +103,7 @@ public final class ProtectPointcutPostProcessor implements BeanPostProcessor {
         return bean;
     }
 
-    private boolean attemptMatch(Class targetClass, Method method, PointcutExpression expression, String beanName) {
+    private boolean attemptMatch(Class<?> targetClass, Method method, PointcutExpression expression, String beanName) {
         // Determine if the presented AspectJ pointcut expression matches this method
         boolean matches = expression.matchesMethodExecution(method).alwaysMatches();
 
@@ -134,9 +123,7 @@ public final class ProtectPointcutPostProcessor implements BeanPostProcessor {
 
     public void setPointcutMap(Map<String, List<ConfigAttribute>> map) {
         Assert.notEmpty(map);
-        Iterator i = map.keySet().iterator();
-        while (i.hasNext()) {
-            String expression = i.next().toString();
+        for (String expression : map.keySet()) {
             List<ConfigAttribute> value = map.get(expression);
             addPointcut(expression, value);
         }

+ 1 - 0
core/src/main/java/org/springframework/security/intercept/method/aopalliance/MethodDefinitionSourceAdvisor.java

@@ -115,6 +115,7 @@ public class MethodDefinitionSourceAdvisor extends AbstractPointcutAdvisor imple
     //~ Inner Classes ==================================================================================================
 
     class MethodDefinitionSourcePointcut extends StaticMethodMatcherPointcut {
+        @SuppressWarnings("unchecked")
         public boolean matches(Method m, Class targetClass) {
             return attributeSource.getAttributes(m, targetClass) != null;
         }

+ 12 - 12
core/src/main/java/org/springframework/security/intercept/web/RequestKey.java

@@ -49,21 +49,21 @@ public class RequestKey {
         }
         
         if (method == null) {
-        	return key.method == null;
+            return key.method == null;
         }
 
         return method.equals(key.method);        
     }
 
-	public String toString() {
-		StringBuffer sb = new StringBuffer(url.length() + 7);
-		sb.append("[");
-		if (method != null) {
-			sb.append(method).append(",");
-		}
-		sb.append(url);
-		sb.append("]");
-		
-		return sb.toString();
-	}
+    public String toString() {
+        StringBuffer sb = new StringBuffer(url.length() + 7);
+        sb.append("[");
+        if (method != null) {
+            sb.append(method).append(",");
+        }
+        sb.append(url);
+        sb.append("]");
+        
+        return sb.toString();
+    }
 }

+ 7 - 10
core/src/main/java/org/springframework/security/ldap/populator/DefaultLdapAuthoritiesPopulator.java

@@ -29,8 +29,8 @@ import org.apache.commons.logging.LogFactory;
 import javax.naming.directory.SearchControls;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
@@ -181,7 +181,7 @@ public class DefaultLdapAuthoritiesPopulator implements LdapAuthoritiesPopulator
 
         Set<GrantedAuthority> roles = getGroupMembershipRoles(userDn, username);
 
-        Set extraRoles = getAdditionalRoles(user, username);
+        Set<GrantedAuthority> extraRoles = getAdditionalRoles(user, username);
 
         if (extraRoles != null) {
             roles.addAll(extraRoles);
@@ -198,28 +198,25 @@ public class DefaultLdapAuthoritiesPopulator implements LdapAuthoritiesPopulator
     }
 
     public Set<GrantedAuthority> getGroupMembershipRoles(String userDn, String username) {
-        Set authorities = new HashSet();
-
         if (getGroupSearchBase() == null) {
-            return authorities;
+            return Collections.emptySet();
         }
 
+        Set<GrantedAuthority> authorities = new HashSet<GrantedAuthority>();
+
         if (logger.isDebugEnabled()) {
             logger.debug("Searching for roles for user '" + username + "', DN = " + "'" + userDn + "', with filter "
                     + groupSearchFilter + " in search base '" + getGroupSearchBase() + "'");
         }
 
-        Set userRoles = ldapTemplate.searchForSingleAttributeValues(getGroupSearchBase(), groupSearchFilter,
+        Set<String> userRoles = ldapTemplate.searchForSingleAttributeValues(getGroupSearchBase(), groupSearchFilter,
                 new String[]{userDn, username}, groupRoleAttribute);
 
         if (logger.isDebugEnabled()) {
             logger.debug("Roles from search: " + userRoles);
         }
 
-        Iterator it = userRoles.iterator();
-
-        while (it.hasNext()) {
-            String role = (String) it.next();
+        for (String role : userRoles) {
 
             if (convertToUpperCase) {
                 role = role.toUpperCase();

+ 12 - 12
core/src/main/java/org/springframework/security/ldap/search/FilterBasedLdapUserSearch.java

@@ -155,18 +155,18 @@ public class FilterBasedLdapUserSearch implements LdapUserSearch {
         searchControls.setTimeLimit(searchTimeLimit);
     }
     
-	/**
-	 * Specifies the attributes that will be returned as part of the search.
-	 *<p>
-	 * null indicates that all attributes will be returned.
-	 * An empty array indicates no attributes are returned.
-	 *
-	 * @param attrs An array of attribute names identifying the attributes that
-	 * 		    will be returned. Can be null.
-	 */
-	public void setReturningAttributes(String[] attrs) {
-	    searchControls.setReturningAttributes(attrs);
-	}
+    /**
+     * Specifies the attributes that will be returned as part of the search.
+     *<p>
+     * null indicates that all attributes will be returned.
+     * An empty array indicates no attributes are returned.
+     *
+     * @param attrs An array of attribute names identifying the attributes that
+     *             will be returned. Can be null.
+     */
+    public void setReturningAttributes(String[] attrs) {
+        searchControls.setReturningAttributes(attrs);
+    }
 
     public String toString() {
         StringBuffer sb = new StringBuffer();

+ 4 - 4
core/src/main/java/org/springframework/security/providers/anonymous/AnonymousProcessingFilter.java

@@ -81,7 +81,7 @@ public class AnonymousProcessingFilter  extends SpringSecurityFilter  implements
         return auth;
     }
 
-	protected void doFilterHttp(HttpServletRequest request,HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
+    protected void doFilterHttp(HttpServletRequest request,HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
         boolean addedToken = false;
 
         if (applyAnonymousForThisRequest(request)) {
@@ -109,11 +109,11 @@ public class AnonymousProcessingFilter  extends SpringSecurityFilter  implements
                 SecurityContextHolder.getContext().setAuthentication(null);
             }
         }
-	}
+    }
 
-	public int getOrder() {
+    public int getOrder() {
         return FilterChainOrder.ANONYMOUS_FILTER;
-	}
+    }
 
     public String getKey() {
         return key;

+ 2 - 2
core/src/main/java/org/springframework/security/providers/dao/DaoAuthenticationProvider.java

@@ -50,7 +50,7 @@ public class DaoAuthenticationProvider extends AbstractUserDetailsAuthentication
 
     protected void additionalAuthenticationChecks(UserDetails userDetails,
             UsernamePasswordAuthenticationToken authentication) throws AuthenticationException {
-		Object salt = null;
+        Object salt = null;
 
         if (this.saltSource != null) {
             salt = this.saltSource.getSalt(userDetails);
@@ -143,6 +143,6 @@ public class DaoAuthenticationProvider extends AbstractUserDetailsAuthentication
      */
     public void setIncludeDetailsObject(boolean includeDetailsObject) {
         this.includeDetailsObject = includeDetailsObject;
-	}
+    }
 
 }

+ 156 - 156
core/src/main/java/org/springframework/security/providers/encoding/Md4.java

@@ -20,160 +20,160 @@ package org.springframework.security.providers.encoding;
  * @author Alan Stewart
  */
 class Md4 {
-	private static final int BLOCK_SIZE = 64;
-	private static final int HASH_SIZE = 16;
-	private final byte[] buffer = new byte[BLOCK_SIZE];
-	private int bufferOffset;
-	private long byteCount;
-	private int[] state = new int[4];
-	private int[] tmp = new int[16];
-
-	Md4() {
-		reset();
-	}
-
-	public void reset() {
-		bufferOffset = 0;
-		byteCount = 0;
-		state[0] = 0x67452301;
-		state[1] = 0xEFCDAB89;
-		state[2] = 0x98BADCFE;
-		state[3] = 0x10325476;
-	}
-
-	public byte[] digest() {
-		byte[] resBuf = new byte[HASH_SIZE];
-		digest(resBuf, 0, HASH_SIZE);
-		return resBuf;
-	}
-
-	private void digest(byte[] buffer, int off) {
-		for (int i = 0; i < 4; i++) {
-			for (int j = 0; j < 4; j++) {
-				buffer[off + (i * 4 + j)] = (byte) (state[i] >>> (8 * j));
-			}
-		}
-	}
-
-	private void digest(byte[] buffer, int offset, int len) {
-		this.buffer[this.bufferOffset++] = (byte) 0x80;
-		int lenOfBitLen = 8;
-		int C = BLOCK_SIZE - lenOfBitLen;
-		if (this.bufferOffset > C) {
-			while (this.bufferOffset < BLOCK_SIZE) {
-				this.buffer[this.bufferOffset++] = (byte) 0x00;
-			}
-			update(this.buffer, 0);
-			this.bufferOffset = 0;
-		}
-
-		while (this.bufferOffset < C) {
-			this.buffer[this.bufferOffset++] = (byte) 0x00;
-		}
-
-		long bitCount = byteCount * 8;
-		for (int i = 0; i < 64; i += 8) {
-			this.buffer[this.bufferOffset++] = (byte) (bitCount >>> (i));
-		}
-
-		update(this.buffer, 0);
-		digest(buffer, offset);
-	}
-
-	public void update(byte[] input, int offset, int length) {
-		byteCount += length;
-		int todo;
-		while (length >= (todo = BLOCK_SIZE - this.bufferOffset)) {
-			System.arraycopy(input, offset, this.buffer, this.bufferOffset, todo);
-			update(this.buffer, 0);
-			length -= todo;
-			offset += todo;
-			this.bufferOffset = 0;
-		}
-
-		System.arraycopy(input, offset, this.buffer, this.bufferOffset, length);
-		bufferOffset += length;
-	}
-
-	private void update(byte[] block, int offset) {
-		for (int i = 0; i < 16; i++) {
-			tmp[i] = (block[offset++] & 0xFF) | (block[offset++] & 0xFF) << 8 | (block[offset++] & 0xFF) << 16 | (block[offset++] & 0xFF) << 24;
-		}
-
-		int A = state[0];
-		int B = state[1];
-		int C = state[2];
-		int D = state[3];
-
-		A = FF(A, B, C, D, tmp[0], 3);
-		D = FF(D, A, B, C, tmp[1], 7);
-		C = FF(C, D, A, B, tmp[2], 11);
-		B = FF(B, C, D, A, tmp[3], 19);
-		A = FF(A, B, C, D, tmp[4], 3);
-		D = FF(D, A, B, C, tmp[5], 7);
-		C = FF(C, D, A, B, tmp[6], 11);
-		B = FF(B, C, D, A, tmp[7], 19);
-		A = FF(A, B, C, D, tmp[8], 3);
-		D = FF(D, A, B, C, tmp[9], 7);
-		C = FF(C, D, A, B, tmp[10], 11);
-		B = FF(B, C, D, A, tmp[11], 19);
-		A = FF(A, B, C, D, tmp[12], 3);
-		D = FF(D, A, B, C, tmp[13], 7);
-		C = FF(C, D, A, B, tmp[14], 11);
-		B = FF(B, C, D, A, tmp[15], 19);
-
-		A = GG(A, B, C, D, tmp[0], 3);
-		D = GG(D, A, B, C, tmp[4], 5);
-		C = GG(C, D, A, B, tmp[8], 9);
-		B = GG(B, C, D, A, tmp[12], 13);
-		A = GG(A, B, C, D, tmp[1], 3);
-		D = GG(D, A, B, C, tmp[5], 5);
-		C = GG(C, D, A, B, tmp[9], 9);
-		B = GG(B, C, D, A, tmp[13], 13);
-		A = GG(A, B, C, D, tmp[2], 3);
-		D = GG(D, A, B, C, tmp[6], 5);
-		C = GG(C, D, A, B, tmp[10], 9);
-		B = GG(B, C, D, A, tmp[14], 13);
-		A = GG(A, B, C, D, tmp[3], 3);
-		D = GG(D, A, B, C, tmp[7], 5);
-		C = GG(C, D, A, B, tmp[11], 9);
-		B = GG(B, C, D, A, tmp[15], 13);
-
-		A = HH(A, B, C, D, tmp[0], 3);
-		D = HH(D, A, B, C, tmp[8], 9);
-		C = HH(C, D, A, B, tmp[4], 11);
-		B = HH(B, C, D, A, tmp[12], 15);
-		A = HH(A, B, C, D, tmp[2], 3);
-		D = HH(D, A, B, C, tmp[10], 9);
-		C = HH(C, D, A, B, tmp[6], 11);
-		B = HH(B, C, D, A, tmp[14], 15);
-		A = HH(A, B, C, D, tmp[1], 3);
-		D = HH(D, A, B, C, tmp[9], 9);
-		C = HH(C, D, A, B, tmp[5], 11);
-		B = HH(B, C, D, A, tmp[13], 15);
-		A = HH(A, B, C, D, tmp[3], 3);
-		D = HH(D, A, B, C, tmp[11], 9);
-		C = HH(C, D, A, B, tmp[7], 11);
-		B = HH(B, C, D, A, tmp[15], 15);
-
-		state[0] += A;
-		state[1] += B;
-		state[2] += C;
-		state[3] += D;
-	}
-
-	private int FF(int a, int b, int c, int d, int x, int s) {
-		int t = a + ((b & c) | (~b & d)) + x;
-		return t << s | t >>> (32 - s);
-	}
-
-	private int GG(int a, int b, int c, int d, int x, int s) {
-		int t = a + ((b & (c | d)) | (c & d)) + x + 0x5A827999;
-		return t << s | t >>> (32 - s);
-	}
-
-	private int HH(int a, int b, int c, int d, int x, int s) {
-		int t = a + (b ^ c ^ d) + x + 0x6ED9EBA1;
-		return t << s | t >>> (32 - s);
-	}
+    private static final int BLOCK_SIZE = 64;
+    private static final int HASH_SIZE = 16;
+    private final byte[] buffer = new byte[BLOCK_SIZE];
+    private int bufferOffset;
+    private long byteCount;
+    private int[] state = new int[4];
+    private int[] tmp = new int[16];
+
+    Md4() {
+        reset();
+    }
+
+    public void reset() {
+        bufferOffset = 0;
+        byteCount = 0;
+        state[0] = 0x67452301;
+        state[1] = 0xEFCDAB89;
+        state[2] = 0x98BADCFE;
+        state[3] = 0x10325476;
+    }
+
+    public byte[] digest() {
+        byte[] resBuf = new byte[HASH_SIZE];
+        digest(resBuf, 0, HASH_SIZE);
+        return resBuf;
+    }
+
+    private void digest(byte[] buffer, int off) {
+        for (int i = 0; i < 4; i++) {
+            for (int j = 0; j < 4; j++) {
+                buffer[off + (i * 4 + j)] = (byte) (state[i] >>> (8 * j));
+            }
+        }
+    }
+
+    private void digest(byte[] buffer, int offset, int len) {
+        this.buffer[this.bufferOffset++] = (byte) 0x80;
+        int lenOfBitLen = 8;
+        int C = BLOCK_SIZE - lenOfBitLen;
+        if (this.bufferOffset > C) {
+            while (this.bufferOffset < BLOCK_SIZE) {
+                this.buffer[this.bufferOffset++] = (byte) 0x00;
+            }
+            update(this.buffer, 0);
+            this.bufferOffset = 0;
+        }
+
+        while (this.bufferOffset < C) {
+            this.buffer[this.bufferOffset++] = (byte) 0x00;
+        }
+
+        long bitCount = byteCount * 8;
+        for (int i = 0; i < 64; i += 8) {
+            this.buffer[this.bufferOffset++] = (byte) (bitCount >>> (i));
+        }
+
+        update(this.buffer, 0);
+        digest(buffer, offset);
+    }
+
+    public void update(byte[] input, int offset, int length) {
+        byteCount += length;
+        int todo;
+        while (length >= (todo = BLOCK_SIZE - this.bufferOffset)) {
+            System.arraycopy(input, offset, this.buffer, this.bufferOffset, todo);
+            update(this.buffer, 0);
+            length -= todo;
+            offset += todo;
+            this.bufferOffset = 0;
+        }
+
+        System.arraycopy(input, offset, this.buffer, this.bufferOffset, length);
+        bufferOffset += length;
+    }
+
+    private void update(byte[] block, int offset) {
+        for (int i = 0; i < 16; i++) {
+            tmp[i] = (block[offset++] & 0xFF) | (block[offset++] & 0xFF) << 8 | (block[offset++] & 0xFF) << 16 | (block[offset++] & 0xFF) << 24;
+        }
+
+        int A = state[0];
+        int B = state[1];
+        int C = state[2];
+        int D = state[3];
+
+        A = FF(A, B, C, D, tmp[0], 3);
+        D = FF(D, A, B, C, tmp[1], 7);
+        C = FF(C, D, A, B, tmp[2], 11);
+        B = FF(B, C, D, A, tmp[3], 19);
+        A = FF(A, B, C, D, tmp[4], 3);
+        D = FF(D, A, B, C, tmp[5], 7);
+        C = FF(C, D, A, B, tmp[6], 11);
+        B = FF(B, C, D, A, tmp[7], 19);
+        A = FF(A, B, C, D, tmp[8], 3);
+        D = FF(D, A, B, C, tmp[9], 7);
+        C = FF(C, D, A, B, tmp[10], 11);
+        B = FF(B, C, D, A, tmp[11], 19);
+        A = FF(A, B, C, D, tmp[12], 3);
+        D = FF(D, A, B, C, tmp[13], 7);
+        C = FF(C, D, A, B, tmp[14], 11);
+        B = FF(B, C, D, A, tmp[15], 19);
+
+        A = GG(A, B, C, D, tmp[0], 3);
+        D = GG(D, A, B, C, tmp[4], 5);
+        C = GG(C, D, A, B, tmp[8], 9);
+        B = GG(B, C, D, A, tmp[12], 13);
+        A = GG(A, B, C, D, tmp[1], 3);
+        D = GG(D, A, B, C, tmp[5], 5);
+        C = GG(C, D, A, B, tmp[9], 9);
+        B = GG(B, C, D, A, tmp[13], 13);
+        A = GG(A, B, C, D, tmp[2], 3);
+        D = GG(D, A, B, C, tmp[6], 5);
+        C = GG(C, D, A, B, tmp[10], 9);
+        B = GG(B, C, D, A, tmp[14], 13);
+        A = GG(A, B, C, D, tmp[3], 3);
+        D = GG(D, A, B, C, tmp[7], 5);
+        C = GG(C, D, A, B, tmp[11], 9);
+        B = GG(B, C, D, A, tmp[15], 13);
+
+        A = HH(A, B, C, D, tmp[0], 3);
+        D = HH(D, A, B, C, tmp[8], 9);
+        C = HH(C, D, A, B, tmp[4], 11);
+        B = HH(B, C, D, A, tmp[12], 15);
+        A = HH(A, B, C, D, tmp[2], 3);
+        D = HH(D, A, B, C, tmp[10], 9);
+        C = HH(C, D, A, B, tmp[6], 11);
+        B = HH(B, C, D, A, tmp[14], 15);
+        A = HH(A, B, C, D, tmp[1], 3);
+        D = HH(D, A, B, C, tmp[9], 9);
+        C = HH(C, D, A, B, tmp[5], 11);
+        B = HH(B, C, D, A, tmp[13], 15);
+        A = HH(A, B, C, D, tmp[3], 3);
+        D = HH(D, A, B, C, tmp[11], 9);
+        C = HH(C, D, A, B, tmp[7], 11);
+        B = HH(B, C, D, A, tmp[15], 15);
+
+        state[0] += A;
+        state[1] += B;
+        state[2] += C;
+        state[3] += D;
+    }
+
+    private int FF(int a, int b, int c, int d, int x, int s) {
+        int t = a + ((b & c) | (~b & d)) + x;
+        return t << s | t >>> (32 - s);
+    }
+
+    private int GG(int a, int b, int c, int d, int x, int s) {
+        int t = a + ((b & (c | d)) | (c & d)) + x + 0x5A827999;
+        return t << s | t >>> (32 - s);
+    }
+
+    private int HH(int a, int b, int c, int d, int x, int s) {
+        int t = a + (b ^ c ^ d) + x + 0x6ED9EBA1;
+        return t << s | t >>> (32 - s);
+    }
 }

+ 42 - 42
core/src/main/java/org/springframework/security/providers/encoding/Md4PasswordEncoder.java

@@ -36,52 +36,52 @@ public class Md4PasswordEncoder extends BaseDigestPasswordEncoder {
     //~ Methods ========================================================================================================
 
     /**
-	 * Encodes the rawPass using an MD4 message digest. If a salt is specified it will be merged with the password
+     * Encodes the rawPass using an MD4 message digest. If a salt is specified it will be merged with the password
      * before encoding.
-	 *
-	 * @param rawPass The plain text password
-	 * @param salt The salt to sprinkle
-	 * @return Hex string of password digest (or base64 encoded string if encodeHashAsBase64 is enabled.
-	 */
-	public String encodePassword(String rawPass, Object salt) {
-		String saltedPass = mergePasswordAndSalt(rawPass, salt, false);
-		
-		byte[] passBytes;
+     *
+     * @param rawPass The plain text password
+     * @param salt The salt to sprinkle
+     * @return Hex string of password digest (or base64 encoded string if encodeHashAsBase64 is enabled.
+     */
+    public String encodePassword(String rawPass, Object salt) {
+        String saltedPass = mergePasswordAndSalt(rawPass, salt, false);
+        
+        byte[] passBytes;
 
-		try {
-			passBytes = saltedPass.getBytes("UTF-8");
-		} catch (UnsupportedEncodingException e) {
-			throw new IllegalStateException("UTF-8 not supported!");
-		}
-		
-		Md4 md4 = new Md4();
-		md4.update(passBytes, 0, passBytes.length);
-		
-		byte[] resBuf = md4.digest();
+        try {
+            passBytes = saltedPass.getBytes("UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            throw new IllegalStateException("UTF-8 not supported!");
+        }
+        
+        Md4 md4 = new Md4();
+        md4.update(passBytes, 0, passBytes.length);
+        
+        byte[] resBuf = md4.digest();
 
-		if (getEncodeHashAsBase64()) {
-			return new String(Base64.encodeBase64(resBuf));
-		} else {
-			return new String(Hex.encodeHex(resBuf));
-		}
-	}
+        if (getEncodeHashAsBase64()) {
+            return new String(Base64.encodeBase64(resBuf));
+        } else {
+            return new String(Hex.encodeHex(resBuf));
+        }
+    }
 
-	/**
-	 * Takes a previously encoded password and compares it with a raw password after mixing in the salt and
+    /**
+     * Takes a previously encoded password and compares it with a raw password after mixing in the salt and
      * encoding that value.
-	 *
-	 * @param encPass previously encoded password
-	 * @param rawPass plain text password
-	 * @param salt salt to mix into password
-	 * @return true or false
-	 */
-	public boolean isPasswordValid(String encPass, String rawPass, Object salt) {
-		String pass1 = "" + encPass;
-		String pass2 = encodePassword(rawPass, salt);
-		return pass1.equals(pass2);
-	}
+     *
+     * @param encPass previously encoded password
+     * @param rawPass plain text password
+     * @param salt salt to mix into password
+     * @return true or false
+     */
+    public boolean isPasswordValid(String encPass, String rawPass, Object salt) {
+        String pass1 = "" + encPass;
+        String pass2 = encodePassword(rawPass, salt);
+        return pass1.equals(pass2);
+    }
 
-	public String getAlgorithm() {
-		return "MD4";
-	}
+    public String getAlgorithm() {
+        return "MD4";
+    }
 }

+ 5 - 5
core/src/main/java/org/springframework/security/providers/encoding/MessageDigestPasswordEncoder.java

@@ -74,12 +74,12 @@ public class MessageDigestPasswordEncoder extends BaseDigestPasswordEncoder {
         MessageDigest messageDigest = getMessageDigest();
 
         byte[] digest;
-		
+        
         try {
-			digest = messageDigest.digest(saltedPass.getBytes("UTF-8"));
-		} catch (UnsupportedEncodingException e) {
-			throw new IllegalStateException("UTF-8 not supported!");
-		}
+            digest = messageDigest.digest(saltedPass.getBytes("UTF-8"));
+        } catch (UnsupportedEncodingException e) {
+            throw new IllegalStateException("UTF-8 not supported!");
+        }
 
         if (getEncodeHashAsBase64()) {
             return new String(Base64.encodeBase64(digest));

+ 7 - 9
core/src/main/java/org/springframework/security/providers/jaas/AuthorityGranter.java

@@ -21,14 +21,11 @@ import java.util.Set;
 
 
 /**
- * The AuthorityGranter interface is used to map a given principal to role
- * names.
- *
- * <P>
+ * The AuthorityGranter interface is used to map a given principal to role names.
+ * <p>
  * If a Windows NT login module were to be used from JAAS, an AuthrityGranter
  * implementation could be created to map a NT Group Principal to a ROLE_USER
- * role for instance. <br>
- * </p>
+ * role for instance.
  *
  * @author Ray Krueger
  * @version $Id$
@@ -40,13 +37,14 @@ public interface AuthorityGranter {
      * The grant method is called for each principal returned from the LoginContext subject. If the
      * AuthorityGranter wishes to grant any authorities, it should return a java.util.Set containing the role names it
      * wishes to grant, such as ROLE_USER. If the AuthrityGranter does not wish to grant any authorities it should
-     * return null. <br>
+     * return null.
+     * <p>
      * The set may contain any object as all objects in the returned set will be passed to the JaasGrantedAuthority
      * constructor using toString().
      *
      * @param principal One of the principals from the LoginContext.getSubect().getPrincipals() method.
      *
-     * @return A java.util.Set of role names to grant, or null meaning no roles should be granted for the principal.
+     * @return the role names to grant, or null, meaning no roles should be granted to the principal.
      */
-    Set grant(Principal principal);
+    Set<String> grant(Principal principal);
 }

+ 63 - 74
core/src/main/java/org/springframework/security/providers/jaas/JaasAuthenticationProvider.java

@@ -15,40 +15,11 @@
 
 package org.springframework.security.providers.jaas;
 
-import org.springframework.security.SpringSecurityException;
-import org.springframework.security.Authentication;
-import org.springframework.security.AuthenticationException;
-import org.springframework.security.GrantedAuthority;
-
-import org.springframework.security.context.HttpSessionContextIntegrationFilter;
-import org.springframework.security.context.SecurityContext;
-
-import org.springframework.security.providers.AuthenticationProvider;
-import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
-import org.springframework.security.providers.jaas.event.JaasAuthenticationFailedEvent;
-import org.springframework.security.providers.jaas.event.JaasAuthenticationSuccessEvent;
-
-import org.springframework.security.ui.session.HttpSessionDestroyedEvent;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.springframework.beans.factory.InitializingBean;
-
-import org.springframework.context.*;
-
-import org.springframework.core.io.Resource;
-
-import org.springframework.util.Assert;
-
 import java.io.IOException;
-
 import java.security.Principal;
 import java.security.Security;
-
-import java.util.Arrays;
+import java.util.ArrayList;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Set;
 
 import javax.security.auth.callback.Callback;
@@ -58,6 +29,27 @@ import javax.security.auth.login.Configuration;
 import javax.security.auth.login.LoginContext;
 import javax.security.auth.login.LoginException;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.context.ApplicationEvent;
+import org.springframework.context.ApplicationEventPublisher;
+import org.springframework.context.ApplicationEventPublisherAware;
+import org.springframework.context.ApplicationListener;
+import org.springframework.core.io.Resource;
+import org.springframework.security.Authentication;
+import org.springframework.security.AuthenticationException;
+import org.springframework.security.GrantedAuthority;
+import org.springframework.security.SpringSecurityException;
+import org.springframework.security.context.HttpSessionSecurityContextRepository;
+import org.springframework.security.context.SecurityContext;
+import org.springframework.security.providers.AuthenticationProvider;
+import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
+import org.springframework.security.providers.jaas.event.JaasAuthenticationFailedEvent;
+import org.springframework.security.providers.jaas.event.JaasAuthenticationSuccessEvent;
+import org.springframework.security.ui.session.HttpSessionDestroyedEvent;
+import org.springframework.util.Assert;
+
 
 /**
  * An {@link AuthenticationProvider} implementation that retrieves user details from a JAAS login configuration.
@@ -177,64 +169,61 @@ public class JaasAuthenticationProvider implements AuthenticationProvider, Appli
      *         only throws a AuthenticationServiceException, with the message of the LoginException that will be
      *         thrown, should the loginContext.login() method fail.
      */
-    public Authentication authenticate(Authentication auth)
-        throws AuthenticationException {
-        if (auth instanceof UsernamePasswordAuthenticationToken) {
-            UsernamePasswordAuthenticationToken request = (UsernamePasswordAuthenticationToken) auth;
+    public Authentication authenticate(Authentication auth) throws AuthenticationException {
+        if (!(auth instanceof UsernamePasswordAuthenticationToken)) {
+            return null;
+        }
 
-            try {
-                //Create the LoginContext object, and pass our InternallCallbackHandler
-                LoginContext loginContext = new LoginContext(loginContextName, new InternalCallbackHandler(auth));
+        UsernamePasswordAuthenticationToken request = (UsernamePasswordAuthenticationToken) auth;
+        Set<GrantedAuthority> authorities;
 
-                //Attempt to login the user, the LoginContext will call our InternalCallbackHandler at this point.
-                loginContext.login();
+        try {
+            // Create the LoginContext object, and pass our InternallCallbackHandler
+            LoginContext loginContext = new LoginContext(loginContextName, new InternalCallbackHandler(auth));
 
-                //create a set to hold the authorities, and add any that have already been applied.
-                Set<GrantedAuthority> authorities = new HashSet();
+            // Attempt to login the user, the LoginContext will call our InternalCallbackHandler at this point.
+            loginContext.login();
 
-                if (request.getAuthorities() != null) {
-                    authorities.addAll(request.getAuthorities());
-                }
+            // Create a set to hold the authorities, and add any that have already been applied.
+            authorities = new HashSet<GrantedAuthority>();
 
-                //get the subject principals and pass them to each of the AuthorityGranters
-                Set principals = loginContext.getSubject().getPrincipals();
+            if (request.getAuthorities() != null) {
+                authorities.addAll(request.getAuthorities());
+            }
 
-                for (Iterator iterator = principals.iterator(); iterator.hasNext();) {
-                    Principal principal = (Principal) iterator.next();
+            // Get the subject principals and pass them to each of the AuthorityGranters
+            Set<Principal> principals = loginContext.getSubject().getPrincipals();
 
-                    for (int i = 0; i < authorityGranters.length; i++) {
-                        AuthorityGranter granter = authorityGranters[i];
-                        Set roles = granter.grant(principal);
+            for (Principal principal : principals) {
+                for (int i = 0; i < authorityGranters.length; i++) {
+                    AuthorityGranter granter = authorityGranters[i];
+                    Set<String> roles = granter.grant(principal);
 
-                        //If the granter doesn't wish to grant any authorities, it should return null.
-                        if ((roles != null) && !roles.isEmpty()) {
-                            for (Iterator roleIterator = roles.iterator(); roleIterator.hasNext();) {
-                                String role = roleIterator.next().toString();
-                                authorities.add(new JaasGrantedAuthority(role, principal));
-                            }
+                    // If the granter doesn't wish to grant any authorities, it should return null.
+                    if ((roles != null) && !roles.isEmpty()) {
+                        for (String role : roles) {
+                            authorities.add(new JaasGrantedAuthority(role, principal));
                         }
                     }
                 }
+            }
 
-                //Convert the authorities set back to an array and apply it to the token.
-                JaasAuthenticationToken result = new JaasAuthenticationToken(request.getPrincipal(),
-                        request.getCredentials(),
-                        (GrantedAuthority[]) authorities.toArray(new GrantedAuthority[0]), loginContext);
+            //Convert the authorities set back to an array and apply it to the token.
+            JaasAuthenticationToken result = new JaasAuthenticationToken(request.getPrincipal(),
+                    request.getCredentials(), new ArrayList<GrantedAuthority>(authorities), loginContext);
 
-                //Publish the success event
-                publishSuccessEvent(result);
+            //Publish the success event
+            publishSuccessEvent(result);
 
-                //we're done, return the token.
-                return result;
-            } catch (LoginException loginException) {
-                SpringSecurityException ase = loginExceptionResolver.resolveException(loginException);
+            //we're done, return the token.
+            return result;
 
-                publishFailureEvent(request, ase);
-                throw ase;
-            }
-        }
+        } catch (LoginException loginException) {
+            SpringSecurityException ase = loginExceptionResolver.resolveException(loginException);
 
-        return null;
+            publishFailureEvent(request, ase);
+            throw ase;
+        }
     }
 
     /**
@@ -318,13 +307,13 @@ public class JaasAuthenticationProvider implements AuthenticationProvider, Appli
 
     /**
      * Handles the logout by getting the SecurityContext for the session that was destroyed. <b>MUST NOT use
-     * SecurityContextHolder we are logging out a session that is not related to the current user.</b>
+     * SecurityContextHolder as we are logging out a session that is not related to the current user.</b>
      *
      * @param event
      */
     protected void handleLogout(HttpSessionDestroyedEvent event) {
         SecurityContext context = (SecurityContext)
-                event.getSession().getAttribute(HttpSessionContextIntegrationFilter.SPRING_SECURITY_CONTEXT_KEY);
+                event.getSession().getAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY);
 
         if (context == null) {
             log.debug("The destroyed session has no SecurityContext");

+ 4 - 2
core/src/main/java/org/springframework/security/providers/jaas/JaasAuthenticationToken.java

@@ -15,6 +15,8 @@
 
 package org.springframework.security.providers.jaas;
 
+import java.util.List;
+
 import org.springframework.security.GrantedAuthority;
 
 import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
@@ -40,8 +42,8 @@ public class JaasAuthenticationToken extends UsernamePasswordAuthenticationToken
         this.loginContext = loginContext;
     }
 
-    public JaasAuthenticationToken(Object principal, Object credentials, GrantedAuthority[] authorities,
-        LoginContext loginContext) {
+    public JaasAuthenticationToken(Object principal, Object credentials, List<GrantedAuthority> authorities,
+            LoginContext loginContext) {
         super(principal, credentials, authorities);
         this.loginContext = loginContext;
     }

+ 13 - 10
core/src/main/java/org/springframework/security/providers/jaas/SecurityContextLoginModule.java

@@ -32,16 +32,18 @@ import javax.security.auth.spi.LoginModule;
 
 /**
  * An implementation of {@link LoginModule} that uses a Spring Security {@link
- * org.springframework.security.context.SecurityContext SecurityContext} to provide authentication.<p>This LoginModule
- * provides opposite functionality to the {@link JaasAuthenticationProvider} API, and should not really be used in
- * conjunction with it.</p>
- *  <p>The {@link JaasAuthenticationProvider} allows Spring Security to authenticate against Jaas.</p>
- *  <p>The SecurityContextLoginModule allows a Jaas based application to authenticate against Spring Security.
+ * org.springframework.security.context.SecurityContext SecurityContext} to provide authentication.
+ * <p>
+ * This LoginModule provides opposite functionality to the {@link JaasAuthenticationProvider} API, and should not
+ * really be used in conjunction with it.
+ * <p>
+ * The {@link JaasAuthenticationProvider} allows Spring Security to authenticate against Jaas.
+ * <p>
+ * The SecurityContextLoginModule allows a Jaas based application to authenticate against Spring Security.
  * If there is no Authentication in the  {@link SecurityContextHolder} the login() method will throw a LoginException
- * by default.
- * This functionality can be changed with the <tt>ignoreMissingAuthentication</tt> option by setting it to "true".
- * Setting ignoreMissingAuthentication=true will tell the SecurityContextLoginModule to simply return false and be
- * ignored if the authentication is null.</p>
+ * by default. This functionality can be changed with the <tt>ignoreMissingAuthentication</tt> option by setting it
+ * to "true". Setting ignoreMissingAuthentication=true will tell the SecurityContextLoginModule to simply return false
+ * and be ignored if the authentication is null.
  *
  * @author Brian Moseley
  * @author Ray Krueger
@@ -107,11 +109,12 @@ public class SecurityContextLoginModule implements LoginModule {
      * <code>LoginContext</code> likely won't provide one that understands Spring Security. Also ignores the
      * <code>sharedState</code> and <code>options</code> parameters, since none are recognized.
      *
-     * @param subject the <code>Subject</code> to be authenticated. <p>
+     * @param subject the <code>Subject</code> to be authenticated.
      * @param callbackHandler is ignored
      * @param sharedState is ignored
      * @param options are ignored
      */
+    @SuppressWarnings("unchecked")
     public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, Map options) {
         this.subject = subject;
 

+ 9 - 13
core/src/main/java/org/springframework/security/providers/ldap/authenticator/PasswordComparisonAuthenticator.java

@@ -15,6 +15,11 @@
 
 package org.springframework.security.providers.ldap.authenticator;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.ldap.NameNotFoundException;
+import org.springframework.ldap.core.DirContextOperations;
+import org.springframework.ldap.core.support.BaseLdapPathContextSource;
 import org.springframework.security.Authentication;
 import org.springframework.security.BadCredentialsException;
 import org.springframework.security.ldap.LdapUtils;
@@ -22,16 +27,8 @@ import org.springframework.security.ldap.SpringSecurityLdapTemplate;
 import org.springframework.security.providers.UsernamePasswordAuthenticationToken;
 import org.springframework.security.providers.encoding.PasswordEncoder;
 import org.springframework.security.userdetails.UsernameNotFoundException;
-import org.springframework.ldap.NameNotFoundException;
-import org.springframework.ldap.core.DirContextOperations;
-import org.springframework.ldap.core.support.BaseLdapPathContextSource;
 import org.springframework.util.Assert;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import java.util.Iterator;
-
 
 /**
  * An {@link org.springframework.security.providers.ldap.LdapAuthenticator LdapAuthenticator} which compares the login
@@ -71,17 +68,16 @@ public final class PasswordComparisonAuthenticator extends AbstractLdapAuthentic
         String username = authentication.getName();
         String password = (String)authentication.getCredentials();
 
-        Iterator dns = getUserDns(username).iterator();
-
         SpringSecurityLdapTemplate ldapTemplate = new SpringSecurityLdapTemplate(getContextSource());
 
-        while (dns.hasNext() && user == null) {
-            final String userDn = (String) dns.next();
-
+        for (String userDn : getUserDns(username)) {
             try {
                 user = ldapTemplate.retrieveEntry(userDn, getUserAttributes());
             } catch (NameNotFoundException ignore) {
             }
+            if (user != null) {
+                break;
+            }
         }
 
         if (user == null && getUserSearch() != null) {

+ 6 - 11
core/src/main/java/org/springframework/security/providers/preauth/PreAuthenticatedAuthenticationProvider.java

@@ -1,21 +1,17 @@
 package org.springframework.security.providers.preauth;
 
-import java.util.Arrays;
-
-import org.springframework.security.providers.AuthenticationProvider;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.core.Ordered;
 import org.springframework.security.Authentication;
 import org.springframework.security.AuthenticationException;
 import org.springframework.security.BadCredentialsException;
-import org.springframework.security.GrantedAuthority;
+import org.springframework.security.providers.AuthenticationProvider;
 import org.springframework.security.userdetails.AuthenticationUserDetailsService;
 import org.springframework.security.userdetails.UserDetails;
 import org.springframework.security.userdetails.UserDetailsChecker;
 import org.springframework.security.userdetails.checker.AccountStatusUserDetailsChecker;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.core.Ordered;
 import org.springframework.util.Assert;
 
 /**
@@ -87,8 +83,7 @@ public class PreAuthenticatedAuthenticationProvider implements AuthenticationPro
         userDetailsChecker.check(ud);
 
         PreAuthenticatedAuthenticationToken result =
-                new PreAuthenticatedAuthenticationToken(ud, authentication.getCredentials(),
-                        ud.getAuthorities().toArray(new GrantedAuthority[0]));
+                new PreAuthenticatedAuthenticationToken(ud, authentication.getCredentials(), ud.getAuthorities());
         result.setDetails(authentication.getDetails());
 
         return result;

+ 6 - 5
core/src/main/java/org/springframework/security/providers/rcp/RemoteAuthenticationManager.java

@@ -29,11 +29,12 @@ public interface RemoteAuthenticationManager {
 
     /**
      * Attempts to authenticate the remote client using the presented username and password. If authentication
-     * is successful, an array of <code>GrantedAuthority[]</code> objects will be returned.<p>In order to
-     * maximise remoting protocol compatibility, a design decision was taken to operate with minimal arguments and
-     * return only the minimal amount of information required for remote clients to enable/disable relevant user
-     * interface commands etc. There is nothing preventing users from implementing their own equivalent package that
-     * works with more complex object types.</p>
+     * is successful, an array of <code>GrantedAuthority[]</code> objects will be returned.
+     * <p>
+     * In order to maximise remoting protocol compatibility, a design decision was taken to operate with minimal
+     * arguments and return only the minimal amount of information required for remote clients to enable/disable
+     * relevant user interface commands etc. There is nothing preventing users from implementing their own equivalent
+     * package that works with more complex object types.
      *
      * @param username the username the remote client wishes to authenticate with.
      * @param password the password the remote client wishes to authenticate with.

+ 10 - 6
core/src/main/java/org/springframework/security/providers/rcp/RemoteAuthenticationProvider.java

@@ -15,6 +15,8 @@
 
 package org.springframework.security.providers.rcp;
 
+import java.util.Arrays;
+
 import org.springframework.security.Authentication;
 import org.springframework.security.AuthenticationException;
 import org.springframework.security.GrantedAuthority;
@@ -28,11 +30,13 @@ import org.springframework.util.Assert;
 
 
 /**
- * Client-side object which queries a  {@link RemoteAuthenticationManager} to validate an authentication request.<p>A
- * new <code>Authentication</code> object is created by this class comprising the request <code>Authentication</code>
+ * Client-side object which queries a  {@link RemoteAuthenticationManager} to validate an authentication request.
+ * <p>
+ * A new <code>Authentication</code> object is created by this class comprising the request <code>Authentication</code>
  * object's <code>principal</code>, <code>credentials</code> and the <code>GrantedAuthority</code>[]s returned by the
- * <code>RemoteAuthenticationManager</code>.</p>
- *  <p>The <code>RemoteAuthenticationManager</code> should not require any special username or password setting on
+ * <code>RemoteAuthenticationManager</code>.
+ * <p>
+ * The <code>RemoteAuthenticationManager</code> should not require any special username or password setting on
  * the remoting client proxy factory to execute the call. Instead the entire authentication request must be
  * encapsulated solely within the <code>Authentication</code> request object. In practical terms this means the
  * <code>RemoteAuthenticationManager</code> will <b>not</b> be protected by BASIC or any other HTTP-level
@@ -50,7 +54,7 @@ public class RemoteAuthenticationProvider implements AuthenticationProvider, Ini
 
     //~ Methods ========================================================================================================
 
-	public void afterPropertiesSet() throws Exception {
+    public void afterPropertiesSet() throws Exception {
         Assert.notNull(this.remoteAuthenticationManager, "remoteAuthenticationManager is mandatory");
     }
 
@@ -60,7 +64,7 @@ public class RemoteAuthenticationProvider implements AuthenticationProvider, Ini
         String password = authentication.getCredentials().toString();
         GrantedAuthority[] authorities = remoteAuthenticationManager.attemptAuthentication(username, password);
 
-        return new UsernamePasswordAuthenticationToken(username, password, authorities);
+        return new UsernamePasswordAuthenticationToken(username, password, Arrays.asList(authorities));
     }
 
     public RemoteAuthenticationManager getRemoteAuthenticationManager() {

+ 11 - 23
core/src/main/java/org/springframework/security/providers/rememberme/RememberMeAuthenticationProvider.java

@@ -15,36 +15,25 @@
 
 package org.springframework.security.providers.rememberme;
 
-import org.springframework.security.SpringSecurityMessageSource;
-import org.springframework.security.Authentication;
-import org.springframework.security.AuthenticationException;
-import org.springframework.security.BadCredentialsException;
-
-import org.springframework.security.providers.AuthenticationProvider;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
 import org.springframework.beans.factory.InitializingBean;
-
 import org.springframework.context.MessageSource;
 import org.springframework.context.MessageSourceAware;
 import org.springframework.context.support.MessageSourceAccessor;
-
+import org.springframework.security.Authentication;
+import org.springframework.security.AuthenticationException;
+import org.springframework.security.BadCredentialsException;
+import org.springframework.security.SpringSecurityMessageSource;
+import org.springframework.security.providers.AuthenticationProvider;
 import org.springframework.util.Assert;
 
 
 /**
- * An {@link AuthenticationProvider} implementation that validates {@link
- * org.springframework.security.providers.rememberme.RememberMeAuthenticationToken}s.<p>To be successfully validated, the
- * {@link org.springframework.security.providers.rememberme.RememberMeAuthenticationToken#getKeyHash()} must match this class'
- * {@link #getKey()}.</p>
+ * An {@link AuthenticationProvider} implementation that validates {@link RememberMeAuthenticationToken}s.
+ * <p>
+ * To be successfully validated, the {@link RememberMeAuthenticationToken#getKeyHash()} must match this class'
+ * {@link #getKey()}.
  */
 public class RememberMeAuthenticationProvider implements AuthenticationProvider, InitializingBean, MessageSourceAware {
-    //~ Static fields/initializers =====================================================================================
-
-    private static final Log logger = LogFactory.getLog(RememberMeAuthenticationProvider.class);
-
     //~ Instance fields ================================================================================================
 
     protected MessageSourceAccessor messages = SpringSecurityMessageSource.getAccessor();
@@ -52,13 +41,12 @@ public class RememberMeAuthenticationProvider implements AuthenticationProvider,
 
     //~ Methods ========================================================================================================
 
-	public void afterPropertiesSet() throws Exception {
+    public void afterPropertiesSet() throws Exception {
         Assert.hasLength(key);
         Assert.notNull(this.messages, "A message source must be set");
     }
 
-    public Authentication authenticate(Authentication authentication)
-        throws AuthenticationException {
+    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
         if (!supports(authentication.getClass())) {
             return null;
         }

+ 3 - 0
core/src/main/java/org/springframework/security/providers/rememberme/RememberMeAuthenticationToken.java

@@ -39,6 +39,9 @@ public class RememberMeAuthenticationToken extends AbstractAuthenticationToken i
 
     //~ Constructors ===================================================================================================
 
+    /**
+     * @deprecated
+     */
     public RememberMeAuthenticationToken(String key, Object principal, GrantedAuthority[] authorities) {
         this(key, principal, Arrays.asList(authorities));
     }

+ 1 - 1
core/src/main/java/org/springframework/security/runas/RunAsImplAuthenticationProvider.java

@@ -46,7 +46,7 @@ public class RunAsImplAuthenticationProvider implements InitializingBean, Authen
 
     //~ Methods ========================================================================================================
 
-	public void afterPropertiesSet() throws Exception {
+    public void afterPropertiesSet() throws Exception {
         Assert.notNull(key, "A Key is required and should match that configured for the RunAsManagerImpl");
     }
 

+ 15 - 29
core/src/main/java/org/springframework/security/securechannel/ChannelDecisionManagerImpl.java

@@ -24,6 +24,7 @@ import org.springframework.util.Assert;
 
 import java.io.IOException;
 
+import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
@@ -52,35 +53,26 @@ public class ChannelDecisionManagerImpl implements ChannelDecisionManager, Initi
 
     //~ Instance fields ================================================================================================
 
-    private List channelProcessors;
+    private List<ChannelProcessor> channelProcessors;
 
     //~ Methods ========================================================================================================
 
     public void afterPropertiesSet() throws Exception {
-        checkIfValidList(this.channelProcessors);
+        Assert.notEmpty(channelProcessors, "A list of ChannelProcessors is required");
     }
 
-    private void checkIfValidList(List listToCheck) {
-        Assert.notEmpty(listToCheck, "A list of ChannelProcessors is required");
-    }
-
-    public void decide(FilterInvocation invocation, List<ConfigAttribute> config)
-            throws IOException, ServletException {
+    public void decide(FilterInvocation invocation, List<ConfigAttribute> config) throws IOException, ServletException {
 
-        Iterator attrs = config.iterator();
+        Iterator<ConfigAttribute> attrs = config.iterator();
 
         while (attrs.hasNext()) {
-            ConfigAttribute attribute = (ConfigAttribute) attrs.next();
+            ConfigAttribute attribute = attrs.next();
             if (ANY_CHANNEL.equals(attribute.getAttribute())) {
                 return;
             }
         }
 
-        Iterator iter = this.channelProcessors.iterator();
-
-        while (iter.hasNext()) {
-            ChannelProcessor processor = (ChannelProcessor) iter.next();
-
+        for (ChannelProcessor processor : channelProcessors) {
             processor.decide(invocation, config);
 
             if (invocation.getResponse().isCommitted()) {
@@ -89,22 +81,20 @@ public class ChannelDecisionManagerImpl implements ChannelDecisionManager, Initi
         }
     }
 
-    protected List getChannelProcessors() {
+    protected List<ChannelProcessor> getChannelProcessors() {
         return this.channelProcessors;
     }
 
-    public void setChannelProcessors(List newList) {
-        checkIfValidList(newList);
+    @SuppressWarnings("cast")
+    public void setChannelProcessors(List<?> newList) {
+        Assert.notEmpty(newList, "A list of ChannelProcessors is required");
+        channelProcessors = new ArrayList<ChannelProcessor>(newList.size());
 
-        Iterator iter = newList.iterator();
-
-        while (iter.hasNext()) {
-            Object currentObject = iter.next();
+        for (Object currentObject : newList) {
             Assert.isInstanceOf(ChannelProcessor.class, currentObject, "ChannelProcessor " +
                     currentObject.getClass().getName() + " must implement ChannelProcessor");
+            channelProcessors.add((ChannelProcessor)currentObject);
         }
-
-        this.channelProcessors = newList;
     }
 
     public boolean supports(ConfigAttribute attribute) {
@@ -112,11 +102,7 @@ public class ChannelDecisionManagerImpl implements ChannelDecisionManager, Initi
             return true;
         }
 
-        Iterator iter = this.channelProcessors.iterator();
-
-        while (iter.hasNext()) {
-            ChannelProcessor processor = (ChannelProcessor) iter.next();
-
+        for (ChannelProcessor processor : channelProcessors) {
             if (processor.supports(attribute)) {
                 return true;
             }

+ 9 - 14
core/src/main/java/org/springframework/security/securechannel/ChannelProcessor.java

@@ -26,17 +26,12 @@ import javax.servlet.ServletException;
 
 /**
  * Decides whether a web channel meets a specific security condition.
- *
- * <P>
- * <code>ChannelProcessor</code> implementations are iterated by the {@link
- * ChannelDecisionManagerImpl}.
- * </p>
- *
- * <P>
+ * <p>
+ * <code>ChannelProcessor</code> implementations are iterated by the {@link ChannelDecisionManagerImpl}.
+ * <p>
  * If an implementation has an issue with the channel security, they should
  * take action themselves. The callers of the implementation do not take any
  * action.
- * </p>
  *
  * @author Ben Alex
  * @version $Id$
@@ -49,16 +44,16 @@ public interface ChannelProcessor {
      * security based on the requested list of <tt>ConfigAttribute</tt>s.
      *
      */
-    void decide(FilterInvocation invocation, List<ConfigAttribute> config)
-        throws IOException, ServletException;
+    void decide(FilterInvocation invocation, List<ConfigAttribute> config) throws IOException, ServletException;
 
     /**
      * Indicates whether this <code>ChannelProcessor</code> is able to process the passed
-     * <code>ConfigAttribute</code>.<p>This allows the <code>ChannelProcessingFilter</code> to check every
-     * configuration attribute can be consumed by the configured <code>ChannelDecisionManager</code>.</p>
+     * <code>ConfigAttribute</code>.
+     * <p>
+     * This allows the <code>ChannelProcessingFilter</code> to check every configuration attribute can be consumed
+     * by the configured <code>ChannelDecisionManager</code>.
      *
-     * @param attribute a configuration attribute that has been configured against the
-     *        <code>ChannelProcessingFilter</code>
+     * @param attribute a configuration attribute that has been configured against the <tt>ChannelProcessingFilter</tt>.
      *
      * @return true if this <code>ChannelProcessor</code> can support the passed configuration attribute
      */

+ 13 - 21
core/src/main/java/org/springframework/security/securechannel/InsecureChannelProcessor.java

@@ -15,29 +15,26 @@
 
 package org.springframework.security.securechannel;
 
-import org.springframework.security.ConfigAttribute;
-
-import org.springframework.security.intercept.web.FilterInvocation;
-
-import org.springframework.beans.factory.InitializingBean;
-
-import org.springframework.util.Assert;
-
 import java.io.IOException;
-
-import java.util.Iterator;
 import java.util.List;
 
 import javax.servlet.ServletException;
 
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.security.ConfigAttribute;
+import org.springframework.security.intercept.web.FilterInvocation;
+import org.springframework.util.Assert;
+
 
 /**
- * <p>Ensures channel security is inactive by review of <code>HttpServletRequest.isSecure()</code> responses.</p>
- *  <P>The class responds to one case-sensitive keyword, {@link #getInsecureKeyword}. If this keyword is detected,
+ * Ensures channel security is inactive by review of <code>HttpServletRequest.isSecure()</code> responses.
+ * <p>
+ * The class responds to one case-sensitive keyword, {@link #getInsecureKeyword}. If this keyword is detected,
  * <code>HttpServletRequest.isSecure()</code> is used to determine the channel security offered. If channel security
  * is present, the configured <code>ChannelEntryPoint</code> is called. By default the entry point is {@link
- * RetryWithHttpEntryPoint}.</p>
- *  <P>The default <code>insecureKeyword</code> is <code>REQUIRES_INSECURE_CHANNEL</code>.</p>
+ * RetryWithHttpEntryPoint}.
+ * <p>
+ * The default <code>insecureKeyword</code> is <code>REQUIRES_INSECURE_CHANNEL</code>.
  *
  * @author Ben Alex
  * @version $Id$
@@ -55,17 +52,12 @@ public class InsecureChannelProcessor implements InitializingBean, ChannelProces
         Assert.notNull(entryPoint, "entryPoint required");
     }
 
-    public void decide(FilterInvocation invocation, List<ConfigAttribute> config)
-        throws IOException, ServletException {
+    public void decide(FilterInvocation invocation, List<ConfigAttribute> config) throws IOException, ServletException {
         if ((invocation == null) || (config == null)) {
             throw new IllegalArgumentException("Nulls cannot be provided");
         }
 
-        Iterator iter = config.iterator();
-
-        while (iter.hasNext()) {
-            ConfigAttribute attribute = (ConfigAttribute) iter.next();
-
+        for (ConfigAttribute attribute : config) {
             if (supports(attribute)) {
                 if (invocation.getHttpRequest().isSecure()) {
                     entryPoint.commence(invocation.getRequest(), invocation.getResponse());

+ 13 - 21
core/src/main/java/org/springframework/security/securechannel/SecureChannelProcessor.java

@@ -15,29 +15,26 @@
 
 package org.springframework.security.securechannel;
 
-import org.springframework.security.ConfigAttribute;
-
-import org.springframework.security.intercept.web.FilterInvocation;
-
-import org.springframework.beans.factory.InitializingBean;
-
-import org.springframework.util.Assert;
-
 import java.io.IOException;
-
-import java.util.Iterator;
 import java.util.List;
 
 import javax.servlet.ServletException;
 
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.security.ConfigAttribute;
+import org.springframework.security.intercept.web.FilterInvocation;
+import org.springframework.util.Assert;
+
 
 /**
- * <p>Ensures channel security is active by review of <code>HttpServletRequest.isSecure()</code> responses.</p>
- *  <P>The class responds to one case-sensitive keyword, {@link #getSecureKeyword}. If this keyword is detected,
+ * Ensures channel security is active by review of <code>HttpServletRequest.isSecure()</code> responses.
+ * <p>
+ * The class responds to one case-sensitive keyword, {@link #getSecureKeyword}. If this keyword is detected,
  * <code>HttpServletRequest.isSecure()</code> is used to determine the channel security offered. If channel security
  * is not present, the configured <code>ChannelEntryPoint</code> is called. By default the entry point is {@link
- * RetryWithHttpsEntryPoint}.</p>
- *  <P>The default <code>secureKeyword</code> is <code>REQUIRES_SECURE_CHANNEL</code>.</p>
+ * RetryWithHttpsEntryPoint}.
+ * <p>
+ * The default <code>secureKeyword</code> is <code>REQUIRES_SECURE_CHANNEL</code>.
  *
  * @author Ben Alex
  * @version $Id$
@@ -55,15 +52,10 @@ public class SecureChannelProcessor implements InitializingBean, ChannelProcesso
         Assert.notNull(entryPoint, "entryPoint required");
     }
 
-    public void decide(FilterInvocation invocation, List<ConfigAttribute> config)
-        throws IOException, ServletException {
+    public void decide(FilterInvocation invocation, List<ConfigAttribute> config) throws IOException, ServletException {
         Assert.isTrue((invocation != null) && (config != null), "Nulls cannot be provided");
 
-        Iterator iter = config.iterator();
-
-        while (iter.hasNext()) {
-            ConfigAttribute attribute = (ConfigAttribute) iter.next();
-
+        for (ConfigAttribute attribute : config) {
             if (supports(attribute)) {
                 if (!invocation.getHttpRequest().isSecure()) {
                     entryPoint.commence(invocation.getRequest(), invocation.getResponse());

+ 39 - 39
core/src/main/java/org/springframework/security/token/DefaultToken.java

@@ -11,49 +11,49 @@ import org.springframework.util.Assert;
  * @since 2.0.1
  */
 public class DefaultToken implements Token {
-	private String key;
-	private long keyCreationTime;
-	private String extendedInformation;
-	
-	public DefaultToken(String key, long keyCreationTime, String extendedInformation) {
-		Assert.hasText(key, "Key required");
-		Assert.notNull(extendedInformation, "Extended information cannot be null");
-		this.key = key;
-		this.keyCreationTime = keyCreationTime;
-		this.extendedInformation = extendedInformation;
-	}
-
-	public String getKey() {
-		return key;
-	}
-	
-	public long getKeyCreationTime() {
-		return keyCreationTime;
-	}
-
-	public String getExtendedInformation() {
-		return extendedInformation;
-	}
-
-	public boolean equals(Object obj) {
-		if (obj != null && obj instanceof DefaultToken) {
-			DefaultToken rhs = (DefaultToken) obj;
-			return this.key.equals(rhs.key) && this.keyCreationTime == rhs.keyCreationTime && this.extendedInformation.equals(rhs.extendedInformation);
-		}
-		return false;
-	}
-
-	public int hashCode() {
+    private String key;
+    private long keyCreationTime;
+    private String extendedInformation;
+    
+    public DefaultToken(String key, long keyCreationTime, String extendedInformation) {
+        Assert.hasText(key, "Key required");
+        Assert.notNull(extendedInformation, "Extended information cannot be null");
+        this.key = key;
+        this.keyCreationTime = keyCreationTime;
+        this.extendedInformation = extendedInformation;
+    }
+
+    public String getKey() {
+        return key;
+    }
+    
+    public long getKeyCreationTime() {
+        return keyCreationTime;
+    }
+
+    public String getExtendedInformation() {
+        return extendedInformation;
+    }
+
+    public boolean equals(Object obj) {
+        if (obj != null && obj instanceof DefaultToken) {
+            DefaultToken rhs = (DefaultToken) obj;
+            return this.key.equals(rhs.key) && this.keyCreationTime == rhs.keyCreationTime && this.extendedInformation.equals(rhs.extendedInformation);
+        }
+        return false;
+    }
+
+    public int hashCode() {
         int code = 979;
         code = code * key.hashCode();
         code = code * new Long(keyCreationTime).hashCode();
         code = code * extendedInformation.hashCode();
         return code;
-	}
+    }
 
-	public String toString() {
-		return "DefaultToken[key=" + new String(key) + "; creation=" + new Date(keyCreationTime) + "; extended=" + extendedInformation + "]";
-	}
-	
-	
+    public String toString() {
+        return "DefaultToken[key=" + new String(key) + "; creation=" + new Date(keyCreationTime) + "; extended=" + extendedInformation + "]";
+    }
+    
+    
 }

+ 108 - 108
core/src/main/java/org/springframework/security/token/KeyBasedPersistenceTokenService.java

@@ -54,117 +54,117 @@ import org.springframework.util.StringUtils;
  *
  */
 public class KeyBasedPersistenceTokenService implements TokenService, InitializingBean {
-	private int pseudoRandomNumberBits = 256;
-	private String serverSecret;
-	private Integer serverInteger;
-	private SecureRandom secureRandom;
-	
-	public Token allocateToken(String extendedInformation) {
-		Assert.notNull(extendedInformation, "Must provided non-null extendedInformation (but it can be empty)");
-		long creationTime = new Date().getTime();
-		String serverSecret = computeServerSecretApplicableAt(creationTime);
-		String pseudoRandomNumber = generatePseudoRandomNumber();
-		String content = new Long(creationTime).toString() + ":" + pseudoRandomNumber + ":" + extendedInformation;
+    private int pseudoRandomNumberBits = 256;
+    private String serverSecret;
+    private Integer serverInteger;
+    private SecureRandom secureRandom;
+    
+    public Token allocateToken(String extendedInformation) {
+        Assert.notNull(extendedInformation, "Must provided non-null extendedInformation (but it can be empty)");
+        long creationTime = new Date().getTime();
+        String serverSecret = computeServerSecretApplicableAt(creationTime);
+        String pseudoRandomNumber = generatePseudoRandomNumber();
+        String content = new Long(creationTime).toString() + ":" + pseudoRandomNumber + ":" + extendedInformation;
 
-		// Compute key
-		String sha512Hex = Sha512DigestUtils.shaHex(content + ":" + serverSecret);
-		String keyPayload = content + ":" + sha512Hex;
-		String key = convertToString(Base64.encodeBase64(convertToBytes(keyPayload)));
-		
-		return new DefaultToken(key, creationTime, extendedInformation);
-	}
+        // Compute key
+        String sha512Hex = Sha512DigestUtils.shaHex(content + ":" + serverSecret);
+        String keyPayload = content + ":" + sha512Hex;
+        String key = convertToString(Base64.encodeBase64(convertToBytes(keyPayload)));
+        
+        return new DefaultToken(key, creationTime, extendedInformation);
+    }
 
-	public Token verifyToken(String key) {
-		if (key == null || "".equals(key)) {
-			return null;
-		}
-		String[] tokens = StringUtils.delimitedListToStringArray(convertToString(Base64.decodeBase64(convertToBytes(key))), ":");
-		Assert.isTrue(tokens.length >= 4, "Expected 4 or more tokens but found " + tokens.length);
-		
-		long creationTime;
-		try {
-			creationTime = Long.decode(tokens[0]).longValue();
-		} catch (NumberFormatException nfe) {
-			throw new IllegalArgumentException("Expected number but found " + tokens[0]);
-		}
-		
-		String serverSecret = computeServerSecretApplicableAt(creationTime);
-		String pseudoRandomNumber = tokens[1];
-		
-		// Permit extendedInfo to itself contain ":" characters
-		StringBuffer extendedInfo = new StringBuffer();
-		for (int i = 2; i < tokens.length-1; i++) {
-			if (i > 2) {
-				extendedInfo.append(":");
-			}
-			extendedInfo.append(tokens[i]);
-		}
-		
-		String sha1Hex = tokens[tokens.length-1];
-		
-		// Verification
-		String content = new Long(creationTime).toString() + ":" + pseudoRandomNumber + ":" + extendedInfo.toString();
-		String expectedSha512Hex = Sha512DigestUtils.shaHex(content + ":" + serverSecret);
-		Assert.isTrue(expectedSha512Hex.equals(sha1Hex), "Key verification failure");
-		
-		return new DefaultToken(key, creationTime, extendedInfo.toString());
-	}
-	
-	private byte[] convertToBytes(String input) {
-		try {
-			return input.getBytes("UTF-8");
-		} catch (UnsupportedEncodingException e) {
-			throw new RuntimeException(e);
-		}
-	}
-	
-	private String convertToString(byte[] bytes) {
-		try {
-			return new String(bytes, "UTF-8");
-		} catch (Exception e) {
-			throw new RuntimeException(e);
-		}
-	}
-	
-	/**
-	 * @return a pseduo random number (hex encoded)
-	 */
-	private String generatePseudoRandomNumber() {
-		byte[] randomizedBits = new byte[pseudoRandomNumberBits];
-		secureRandom.nextBytes(randomizedBits);
-		return new String(Hex.encodeHex(randomizedBits));
-	}
-	
-	private String computeServerSecretApplicableAt(long time) {
-		return serverSecret + ":" + new Long(time % serverInteger.intValue()).intValue();
-	}
+    public Token verifyToken(String key) {
+        if (key == null || "".equals(key)) {
+            return null;
+        }
+        String[] tokens = StringUtils.delimitedListToStringArray(convertToString(Base64.decodeBase64(convertToBytes(key))), ":");
+        Assert.isTrue(tokens.length >= 4, "Expected 4 or more tokens but found " + tokens.length);
+        
+        long creationTime;
+        try {
+            creationTime = Long.decode(tokens[0]).longValue();
+        } catch (NumberFormatException nfe) {
+            throw new IllegalArgumentException("Expected number but found " + tokens[0]);
+        }
+        
+        String serverSecret = computeServerSecretApplicableAt(creationTime);
+        String pseudoRandomNumber = tokens[1];
+        
+        // Permit extendedInfo to itself contain ":" characters
+        StringBuffer extendedInfo = new StringBuffer();
+        for (int i = 2; i < tokens.length-1; i++) {
+            if (i > 2) {
+                extendedInfo.append(":");
+            }
+            extendedInfo.append(tokens[i]);
+        }
+        
+        String sha1Hex = tokens[tokens.length-1];
+        
+        // Verification
+        String content = new Long(creationTime).toString() + ":" + pseudoRandomNumber + ":" + extendedInfo.toString();
+        String expectedSha512Hex = Sha512DigestUtils.shaHex(content + ":" + serverSecret);
+        Assert.isTrue(expectedSha512Hex.equals(sha1Hex), "Key verification failure");
+        
+        return new DefaultToken(key, creationTime, extendedInfo.toString());
+    }
+    
+    private byte[] convertToBytes(String input) {
+        try {
+            return input.getBytes("UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e);
+        }
+    }
+    
+    private String convertToString(byte[] bytes) {
+        try {
+            return new String(bytes, "UTF-8");
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+    
+    /**
+     * @return a pseduo random number (hex encoded)
+     */
+    private String generatePseudoRandomNumber() {
+        byte[] randomizedBits = new byte[pseudoRandomNumberBits];
+        secureRandom.nextBytes(randomizedBits);
+        return new String(Hex.encodeHex(randomizedBits));
+    }
+    
+    private String computeServerSecretApplicableAt(long time) {
+        return serverSecret + ":" + new Long(time % serverInteger.intValue()).intValue();
+    }
 
-	/**
-	 * @param serverSecret the new secret, which can contain a ":" if desired (never being sent to the client)
-	 */
-	public void setServerSecret(String serverSecret) {
-		this.serverSecret = serverSecret;
-	}
-	
-	public void setSecureRandom(SecureRandom secureRandom) {
-		this.secureRandom = secureRandom;
-	}
-	
-	/**
-	 * @param pseudoRandomNumberBits changes the number of bits issued (must be >= 0; defaults to 256)
-	 */
-	public void setPseudoRandomNumberBits(int pseudoRandomNumberBits) {
-		Assert.isTrue(pseudoRandomNumberBits >= 0, "Must have a positive pseudo random number bit size");
-		this.pseudoRandomNumberBits = pseudoRandomNumberBits;
-	}
+    /**
+     * @param serverSecret the new secret, which can contain a ":" if desired (never being sent to the client)
+     */
+    public void setServerSecret(String serverSecret) {
+        this.serverSecret = serverSecret;
+    }
+    
+    public void setSecureRandom(SecureRandom secureRandom) {
+        this.secureRandom = secureRandom;
+    }
+    
+    /**
+     * @param pseudoRandomNumberBits changes the number of bits issued (must be >= 0; defaults to 256)
+     */
+    public void setPseudoRandomNumberBits(int pseudoRandomNumberBits) {
+        Assert.isTrue(pseudoRandomNumberBits >= 0, "Must have a positive pseudo random number bit size");
+        this.pseudoRandomNumberBits = pseudoRandomNumberBits;
+    }
 
-	public void setServerInteger(Integer serverInteger) {
-		this.serverInteger = serverInteger;
-	}
+    public void setServerInteger(Integer serverInteger) {
+        this.serverInteger = serverInteger;
+    }
 
-	public void afterPropertiesSet() throws Exception {
-		Assert.hasText(serverSecret, "Server secret required");
-		Assert.notNull(serverInteger, "Server integer required");
-		Assert.notNull(secureRandom, "SecureRandom instance required");
-	}
+    public void afterPropertiesSet() throws Exception {
+        Assert.hasText(serverSecret, "Server secret required");
+        Assert.notNull(serverInteger, "Server integer required");
+        Assert.notNull(secureRandom, "SecureRandom instance required");
+    }
 }

+ 47 - 48
core/src/main/java/org/springframework/security/token/SecureRandomFactoryBean.java

@@ -10,60 +10,59 @@ import org.springframework.util.FileCopyUtils;
 
 /**
  * Creates a {@link SecureRandom} instance.
- * 
+ *
  * @author Ben Alex
  * @since 2.0.1
- *
+ * @version $Id$
  */
-public class SecureRandomFactoryBean implements FactoryBean {
+public class SecureRandomFactoryBean implements FactoryBean<SecureRandom> {
+
+    private String algorithm = "SHA1PRNG";
+    private Resource seed;
+
+    public SecureRandom getObject() throws Exception {
+        SecureRandom rnd = SecureRandom.getInstance(algorithm);
+
+        if (seed != null) {
+            // Seed specified, so use it
+            byte[] seedBytes = FileCopyUtils.copyToByteArray(seed.getInputStream());
+            rnd.setSeed(seedBytes);
+        } else {
+            // Request the next bytes, thus eagerly incurring the expense of default seeding
+            rnd.nextBytes(new byte[1]);
+        }
 
-	private String algorithm = "SHA1PRNG";
-	private Resource seed;
-	
-	public Object getObject() throws Exception {
-		SecureRandom rnd = SecureRandom.getInstance(algorithm);
-		
-		if (seed != null) {
-			// Seed specified, so use it
-			byte[] seedBytes = FileCopyUtils.copyToByteArray(seed.getInputStream());
-			rnd.setSeed(seedBytes);
-		} else {
-			// Request the next bytes, thus eagerly incurring the expense of default seeding
-			rnd.nextBytes(new byte[1]);
-		}
-		
-		return rnd;
-	}
+        return rnd;
+    }
 
-	public Class getObjectType() {
-		return SecureRandom.class;
-	}
+    public Class<SecureRandom> getObjectType() {
+        return SecureRandom.class;
+    }
 
-	public boolean isSingleton() {
-		return false;
-	}
+    public boolean isSingleton() {
+        return false;
+    }
 
-	/**
-	 * Allows the Pseudo Random Number Generator (PRNG) algorithm to be nominated. Defaults to
-	 * SHA1PRNG.
-	 * 
-	 * @param algorithm to use (mandatory)
-	 */
-	public void setAlgorithm(String algorithm) {
-		Assert.hasText(algorithm, "Algorithm required");
-		this.algorithm = algorithm;
-	}
+    /**
+     * Allows the Pseudo Random Number Generator (PRNG) algorithm to be nominated. Defaults to "SHA1PRNG".
+     *
+     * @param algorithm to use (mandatory)
+     */
+    public void setAlgorithm(String algorithm) {
+        Assert.hasText(algorithm, "Algorithm required");
+        this.algorithm = algorithm;
+    }
 
-	/**
-	 * Allows the user to specify a resource which will act as a seed for the {@link SecureRandom}
-	 * instance. Specifically, the resource will be read into an {@link InputStream} and those
-	 * bytes presented to the {@link SecureRandom#setSeed(byte[])} method. Note that this will
-	 * simply supplement, rather than replace, the existing seed. As such, it is always safe to
-	 * set a seed using this method (it never reduces randomness).
-	 * 
-	 * @param seed to use, or <code>null</code> if no additional seeding is needed
-	 */
-	public void setSeed(Resource seed) {
-		this.seed = seed;
-	}
+    /**
+     * Allows the user to specify a resource which will act as a seed for the {@link SecureRandom}
+     * instance. Specifically, the resource will be read into an {@link InputStream} and those
+     * bytes presented to the {@link SecureRandom#setSeed(byte[])} method. Note that this will
+     * simply supplement, rather than replace, the existing seed. As such, it is always safe to
+     * set a seed using this method (it never reduces randomness).
+     *
+     * @param seed to use, or <code>null</code> if no additional seeding is needed
+     */
+    public void setSeed(Resource seed) {
+        this.seed = seed;
+    }
 }

+ 26 - 26
core/src/main/java/org/springframework/security/token/Token.java

@@ -16,30 +16,30 @@ package org.springframework.security.token;
  * @since 2.0.1
  */
 public interface Token {
-	
-	/**
-	 * Obtains the randomised, secure key assigned to this token. Presentation of this token to
-	 * {@link TokenService} will always return a <code>Token</code> that is equal to the original
-	 * <code>Token</code> issued for that key.
-	 * 
-	 * @return a key with appropriate randomness and security.
-	 */
-	String getKey();
-	
-	/**
-	 * The time the token key was initially created is available from this method. Note that a given
-	 * token must never have this creation time changed. If necessary, a new token can be
-	 * requested from the {@link TokenService} to replace the original token.
-	 * 
-	 * @return the time this token key was created, in the same format as specified by {@link Date#getTime()).
-	 */
-	long getKeyCreationTime();	
-	
-	/**
-	 * Obtains the extended information associated within the token, which was presented when the token
-	 * was first created.
-	 * 
-	 * @return the user-specified extended information, if any
-	 */
-	String getExtendedInformation();
+    
+    /**
+     * Obtains the randomised, secure key assigned to this token. Presentation of this token to
+     * {@link TokenService} will always return a <code>Token</code> that is equal to the original
+     * <code>Token</code> issued for that key.
+     * 
+     * @return a key with appropriate randomness and security.
+     */
+    String getKey();
+    
+    /**
+     * The time the token key was initially created is available from this method. Note that a given
+     * token must never have this creation time changed. If necessary, a new token can be
+     * requested from the {@link TokenService} to replace the original token.
+     * 
+     * @return the time this token key was created, in the same format as specified by {@link Date#getTime()).
+     */
+    long getKeyCreationTime();    
+    
+    /**
+     * Obtains the extended information associated within the token, which was presented when the token
+     * was first created.
+     * 
+     * @return the user-specified extended information, if any
+     */
+    String getExtendedInformation();
 }

+ 17 - 17
core/src/main/java/org/springframework/security/token/TokenService.java

@@ -26,21 +26,21 @@ package org.springframework.security.token;
  *
  */
 public interface TokenService {
-	/**
-	 * Forces the allocation of a new {@link Token}.
-	 * 
-	 * @param the extended information desired in the token (cannot be <code>null</code>, but can be empty)
-	 * @return a new token that has not been issued previously, and is guaranteed to be recognised
-	 * by this implementation's {@link #verifyToken(String)} at any future time.
-	 */
-	Token allocateToken(String extendedInformation);
-	
-	/**
-	 * Permits verification the <{@link Token#getKey()} was issued by this <code>TokenService</code> and
-	 * reconstructs the corresponding <code>Token</code>.
-	 * 
-	 * @param key as obtained from {@link Token#getKey()} and created by this implementation
-	 * @return the token, or <code>null</code> if the token was not issued by this <code>TokenService</code>
-	 */
-	Token verifyToken(String key);
+    /**
+     * Forces the allocation of a new {@link Token}.
+     * 
+     * @param the extended information desired in the token (cannot be <code>null</code>, but can be empty)
+     * @return a new token that has not been issued previously, and is guaranteed to be recognised
+     * by this implementation's {@link #verifyToken(String)} at any future time.
+     */
+    Token allocateToken(String extendedInformation);
+    
+    /**
+     * Permits verification the <{@link Token#getKey()} was issued by this <code>TokenService</code> and
+     * reconstructs the corresponding <code>Token</code>.
+     * 
+     * @param key as obtained from {@link Token#getKey()} and created by this implementation
+     * @return the token, or <code>null</code> if the token was not issued by this <code>TokenService</code>
+     */
+    Token verifyToken(String key);
 }

+ 0 - 2
core/src/main/java/org/springframework/security/ui/SavedRequestAwareAuthenticationSuccessHandler.java

@@ -1,8 +1,6 @@
 package org.springframework.security.ui;
 
 import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;

+ 10 - 10
core/src/main/java/org/springframework/security/ui/basicauth/BasicProcessingFilter.java

@@ -174,7 +174,7 @@ public class BasicProcessingFilter extends SpringSecurityFilter implements Initi
         chain.doFilter(request, response);
     }
 
-	private boolean authenticationIsRequired(String username) {
+    private boolean authenticationIsRequired(String username) {
         // Only reauthenticate if username doesn't match SecurityContextHolder and user isn't authenticated
         // (see SEC-53)
         Authentication existingAuth = SecurityContextHolder.getContext().getAuthentication();
@@ -198,12 +198,12 @@ public class BasicProcessingFilter extends SpringSecurityFilter implements Initi
         // both of which force re-authentication if the respective header is detected (and in doing so replace
         // any existing AnonymousAuthenticationToken). See SEC-610.
         if (existingAuth instanceof AnonymousAuthenticationToken) {
-        	return true;
+            return true;
         }
 
         return false;
     }
-	
+    
     protected void onSuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response,
             Authentication authResult) throws IOException {
     }
@@ -242,20 +242,20 @@ public class BasicProcessingFilter extends SpringSecurityFilter implements Initi
     }
 
     public void setRememberMeServices(RememberMeServices rememberMeServices) {
-    	Assert.notNull(rememberMeServices, "rememberMeServices cannot be null");
+        Assert.notNull(rememberMeServices, "rememberMeServices cannot be null");
         this.rememberMeServices = rememberMeServices;
     }
 
     public void setCredentialsCharset(String credentialsCharset) {
-    	Assert.hasText(credentialsCharset, "credentialsCharset cannot be null or empty");
-		this.credentialsCharset = credentialsCharset;
-	}
+        Assert.hasText(credentialsCharset, "credentialsCharset cannot be null or empty");
+        this.credentialsCharset = credentialsCharset;
+    }
     
     protected String getCredentialsCharset(HttpServletRequest httpRequest) {
-		return credentialsCharset;
-	}    
+        return credentialsCharset;
+    }    
     
-	public int getOrder() {
+    public int getOrder() {
         return FilterChainOrder.BASIC_PROCESSING_FILTER;
     }
 }

+ 2 - 2
core/src/main/java/org/springframework/security/ui/basicauth/BasicProcessingFilterEntryPoint.java

@@ -44,8 +44,8 @@ public class BasicProcessingFilterEntryPoint implements AuthenticationEntryPoint
 
     //~ Methods ========================================================================================================
 
-	public void afterPropertiesSet() throws Exception {
-		Assert.hasText(realmName, "realmName must be specified");
+    public void afterPropertiesSet() throws Exception {
+        Assert.hasText(realmName, "realmName must be specified");
     }
 
     public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException)

+ 6 - 6
core/src/main/java/org/springframework/security/ui/digestauth/DigestProcessingFilterEntryPoint.java

@@ -57,14 +57,14 @@ public class DigestProcessingFilterEntryPoint implements AuthenticationEntryPoin
     //~ Methods ========================================================================================================
 
     public int getOrder() {
-		return order;
-	}
+        return order;
+    }
 
-	public void setOrder(int order) {
-		this.order = order;
-	}
+    public void setOrder(int order) {
+        this.order = order;
+    }
 
-	public void afterPropertiesSet() throws Exception {
+    public void afterPropertiesSet() throws Exception {
         if ((realmName == null) || "".equals(realmName)) {
             throw new IllegalArgumentException("realmName must be specified");
         }

+ 2 - 2
core/src/main/java/org/springframework/security/ui/preauth/AbstractPreAuthenticatedProcessingFilter.java

@@ -99,7 +99,7 @@ public abstract class AbstractPreAuthenticatedProcessingFilter extends SpringSec
             unsuccessfulAuthentication(request, response, failed);
             
             if (!continueFilterChainOnUnsuccessfulAuthentication) {
-            	throw failed;
+                throw failed;
             }
         }
     }
@@ -158,7 +158,7 @@ public abstract class AbstractPreAuthenticatedProcessingFilter extends SpringSec
     }
     
     public void setContinueFilterChainOnUnsuccessfulAuthentication(boolean shouldContinue) {
-    	continueFilterChainOnUnsuccessfulAuthentication = shouldContinue;
+        continueFilterChainOnUnsuccessfulAuthentication = shouldContinue;
     }
 
     /**

+ 3 - 3
core/src/main/java/org/springframework/security/ui/preauth/PreAuthenticatedCredentialsNotFoundException.java

@@ -4,8 +4,8 @@ import org.springframework.security.AuthenticationException;
 
 public class PreAuthenticatedCredentialsNotFoundException extends AuthenticationException {
 
-	public PreAuthenticatedCredentialsNotFoundException(String msg) {
-		super(msg);
-	}
+    public PreAuthenticatedCredentialsNotFoundException(String msg) {
+        super(msg);
+    }
 
 }

+ 14 - 14
core/src/main/java/org/springframework/security/ui/preauth/PreAuthenticatedGrantedAuthoritiesWebAuthenticationDetails.java

@@ -18,27 +18,27 @@ import org.springframework.security.MutableGrantedAuthoritiesContainer;
  * @since 2.0
  */
 public class PreAuthenticatedGrantedAuthoritiesWebAuthenticationDetails extends WebAuthenticationDetails implements
-		MutableGrantedAuthoritiesContainer {
-	public static final long serialVersionUID = 1L;
+        MutableGrantedAuthoritiesContainer {
+    public static final long serialVersionUID = 1L;
 
-	private MutableGrantedAuthoritiesContainer authoritiesContainer = new GrantedAuthoritiesContainerImpl();
+    private MutableGrantedAuthoritiesContainer authoritiesContainer = new GrantedAuthoritiesContainerImpl();
 
-	public PreAuthenticatedGrantedAuthoritiesWebAuthenticationDetails(HttpServletRequest request) {
-		super(request);
-	}
+    public PreAuthenticatedGrantedAuthoritiesWebAuthenticationDetails(HttpServletRequest request) {
+        super(request);
+    }
 
-	public List<GrantedAuthority> getGrantedAuthorities() {
-		return authoritiesContainer.getGrantedAuthorities();
-	}
+    public List<GrantedAuthority> getGrantedAuthorities() {
+        return authoritiesContainer.getGrantedAuthorities();
+    }
 
-	public void setGrantedAuthorities(List<GrantedAuthority> authorities) {
-		this.authoritiesContainer.setGrantedAuthorities(authorities);
-	}
-	
+    public void setGrantedAuthorities(List<GrantedAuthority> authorities) {
+        this.authoritiesContainer.setGrantedAuthorities(authorities);
+    }
+    
     public String toString() {
         StringBuffer sb = new StringBuffer();
         sb.append(super.toString() + "; ");
         sb.append(authoritiesContainer);
         return sb.toString();
-    }	
+    }    
 }

+ 19 - 19
core/src/main/java/org/springframework/security/ui/preauth/PreAuthenticatedProcessingFilterEntryPoint.java

@@ -38,28 +38,28 @@ import org.springframework.core.Ordered;
  * @since 2.0
  */
 public class PreAuthenticatedProcessingFilterEntryPoint implements AuthenticationEntryPoint, Ordered {
-	private static final Log logger = LogFactory.getLog(PreAuthenticatedProcessingFilterEntryPoint.class);
+    private static final Log logger = LogFactory.getLog(PreAuthenticatedProcessingFilterEntryPoint.class);
 
-	private int order = Integer.MAX_VALUE;
+    private int order = Integer.MAX_VALUE;
 
-	/**
-	 * Always returns a 403 error code to the client.
-	 */
-	public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException arg2) throws IOException,
-			ServletException {
-		if (logger.isDebugEnabled()) {
-			logger.debug("Pre-authenticated entry point called. Rejecting access");
-		}
-		HttpServletResponse httpResponse = (HttpServletResponse) response;
-		httpResponse.sendError(HttpServletResponse.SC_FORBIDDEN, "Access Denied");
-	}
+    /**
+     * Always returns a 403 error code to the client.
+     */
+    public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException arg2) throws IOException,
+            ServletException {
+        if (logger.isDebugEnabled()) {
+            logger.debug("Pre-authenticated entry point called. Rejecting access");
+        }
+        HttpServletResponse httpResponse = (HttpServletResponse) response;
+        httpResponse.sendError(HttpServletResponse.SC_FORBIDDEN, "Access Denied");
+    }
 
-	public int getOrder() {
-		return order;
-	}
+    public int getOrder() {
+        return order;
+    }
 
-	public void setOrder(int i) {
-		order = i;
-	}
+    public void setOrder(int i) {
+        order = i;
+    }
 
 }

+ 41 - 41
core/src/main/java/org/springframework/security/ui/preauth/header/RequestHeaderPreAuthenticatedProcessingFilter.java

@@ -27,50 +27,50 @@ import org.springframework.util.Assert;
  * @since 2.0
  */
 public class RequestHeaderPreAuthenticatedProcessingFilter extends AbstractPreAuthenticatedProcessingFilter {
-	private String principalRequestHeader = "SM_USER"; 
-	private String credentialsRequestHeader;
+    private String principalRequestHeader = "SM_USER"; 
+    private String credentialsRequestHeader;
 
-	/**
-	 * Read and returns the header named by <tt>principalRequestHeader</tt> from the request.
-	 * 
-	 * @throws PreAuthenticatedCredentialsNotFoundException if the header is missing 
-	 */
-	protected Object getPreAuthenticatedPrincipal(HttpServletRequest request) {
-		String principal = request.getHeader(principalRequestHeader);
-		
-		if (principal == null) {
-			throw new PreAuthenticatedCredentialsNotFoundException(principalRequestHeader 
-					+ " header not found in request.");
-		}
+    /**
+     * Read and returns the header named by <tt>principalRequestHeader</tt> from the request.
+     * 
+     * @throws PreAuthenticatedCredentialsNotFoundException if the header is missing 
+     */
+    protected Object getPreAuthenticatedPrincipal(HttpServletRequest request) {
+        String principal = request.getHeader(principalRequestHeader);
+        
+        if (principal == null) {
+            throw new PreAuthenticatedCredentialsNotFoundException(principalRequestHeader 
+                    + " header not found in request.");
+        }
 
-		return principal;
-	}	
-	
-	/**
-	 * Credentials aren't usually applicable, but if a <tt>credentialsRequestHeader</tt> is set, this
-	 * will be read and used as the credentials value. Otherwise a dummy value will be used. 
-	 */
-	protected Object getPreAuthenticatedCredentials(HttpServletRequest request) {
-		if (credentialsRequestHeader != null) {
-			String credentials = request.getHeader(credentialsRequestHeader);
-			
-			return credentials;
-		}
+        return principal;
+    }    
+    
+    /**
+     * Credentials aren't usually applicable, but if a <tt>credentialsRequestHeader</tt> is set, this
+     * will be read and used as the credentials value. Otherwise a dummy value will be used. 
+     */
+    protected Object getPreAuthenticatedCredentials(HttpServletRequest request) {
+        if (credentialsRequestHeader != null) {
+            String credentials = request.getHeader(credentialsRequestHeader);
+            
+            return credentials;
+        }
 
-		return "N/A";
-	}
-	
-	public void setPrincipalRequestHeader(String principalRequestHeader) {
-		Assert.hasText(principalRequestHeader, "principalRequestHeader must not be empty or null");
-		this.principalRequestHeader = principalRequestHeader;
-	}
+        return "N/A";
+    }
+    
+    public void setPrincipalRequestHeader(String principalRequestHeader) {
+        Assert.hasText(principalRequestHeader, "principalRequestHeader must not be empty or null");
+        this.principalRequestHeader = principalRequestHeader;
+    }
 
-	public void setCredentialsRequestHeader(String credentialsRequestHeader) {
-		Assert.hasText(credentialsRequestHeader, "credentialsRequestHeader must not be empty or null");		
-		this.credentialsRequestHeader = credentialsRequestHeader;
-	}
+    public void setCredentialsRequestHeader(String credentialsRequestHeader) {
+        Assert.hasText(credentialsRequestHeader, "credentialsRequestHeader must not be empty or null");        
+        this.credentialsRequestHeader = credentialsRequestHeader;
+    }
 
-	public int getOrder() {
-		return FilterChainOrder.PRE_AUTH_FILTER;
-	}
+    public int getOrder() {
+        return FilterChainOrder.PRE_AUTH_FILTER;
+    }
 }

+ 19 - 18
core/src/main/java/org/springframework/security/ui/preauth/websphere/WASSecurityHelper.java

@@ -15,10 +15,10 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 /**
- * WebSphere Security helper class to allow retrieval of the current username and groups. 
+ * WebSphere Security helper class to allow retrieval of the current username and groups.
  * <p>
- * See Spring Security JIRA SEC-477.
- * 
+ * See Spring Security Jira SEC-477.
+ *
  * @author Ruud Senden
  * @author Stephane Manciot
  * @since 2.0
@@ -35,11 +35,11 @@ final class WASSecurityHelper {
     private static Method getSecurityName = null;
 
     // SEC-803
-    private static Class wsCredentialClass = null;
-    
+    private static Class<?> wsCredentialClass = null;
+
     /**
      * Get the security name for the given subject.
-     * 
+     *
      * @param subject
      *            The subject for which to retrieve the security name
      * @return String the security name for the given subject
@@ -64,7 +64,7 @@ final class WASSecurityHelper {
 
     /**
      * Get the current RunAs subject.
-     * 
+     *
      * @return Subject the current RunAs subject
      */
     private static final Subject getRunAsSubject() {
@@ -75,7 +75,7 @@ final class WASSecurityHelper {
 
     /**
      * Get the WebSphere group names for the given subject.
-     * 
+     *
      * @param subject
      *            The subject for which to retrieve the WebSphere group names
      * @return the WebSphere group names for the given subject
@@ -86,11 +86,12 @@ final class WASSecurityHelper {
 
     /**
      * Get the WebSphere group names for the given security name.
-     * 
+     *
      * @param securityName
      *            The securityname for which to retrieve the WebSphere group names
      * @return the WebSphere group names for the given security name
      */
+    @SuppressWarnings("unchecked")
     private static final String[] getWebSphereGroups(final String securityName) {
         Context ic = null;
         try {
@@ -129,7 +130,7 @@ final class WASSecurityHelper {
     public static final String getCurrentUserName() {
         return getSecurityName(getRunAsSubject());
     }
-    
+
     private static final Object invokeMethod(Method method, Object instance, Object[] args)
     {
         try {
@@ -148,9 +149,9 @@ final class WASSecurityHelper {
 
     private static final Method getMethod(String className, String methodName, String[] parameterTypeNames) {
         try {
-            Class c = Class.forName(className);
+            Class<?> c = Class.forName(className);
             final int len = parameterTypeNames.length;
-            Class[] parameterTypes = new Class[len];
+            Class<?>[] parameterTypes = new Class[len];
             for (int i = 0; i < len; i++) {
                 parameterTypes[i] = Class.forName(parameterTypeNames[i]);
             }
@@ -162,7 +163,7 @@ final class WASSecurityHelper {
             logger.error("Required method "+methodName+" with parameter types ("+ Arrays.asList(parameterTypeNames) +") not found on class "+className);
             throw new RuntimeException("Required class"+className+" not found",e);
         }
-    }    
+    }
 
     private static final Method getRunAsSubjectMethod() {
         if (getRunAsSubject == null) {
@@ -184,22 +185,22 @@ final class WASSecurityHelper {
         }
         return getSecurityName;
     }
-    
+
     // SEC-803
-    private static final Class getWSCredentialClass() {
+    private static final Class<?> getWSCredentialClass() {
         if (wsCredentialClass == null) {
             wsCredentialClass = getClass("com.ibm.websphere.security.cred.WSCredential");
         }
         return wsCredentialClass;
     }
-    
-    private static final Class getClass(String className) {
+
+    private static final Class<?> getClass(String className) {
         try {
             return Class.forName(className);
         } catch (ClassNotFoundException e) {
             logger.error("Required class " + className + " not found");
             throw new RuntimeException("Required class " + className + " not found",e);
         }
-    }    
+    }
 
 }

+ 73 - 73
core/src/main/java/org/springframework/security/ui/preauth/websphere/WebSphere2SpringSecurityPropagationInterceptor.java

@@ -19,78 +19,78 @@ import org.springframework.util.Assert;
  * @since 1.0
  */
 public class WebSphere2SpringSecurityPropagationInterceptor implements MethodInterceptor {
-	private static final Log LOG = LogFactory.getLog(WebSphere2SpringSecurityPropagationInterceptor.class);
-	private AuthenticationManager authenticationManager = null;
-	private AuthenticationDetailsSource authenticationDetailsSource = new WebSpherePreAuthenticatedAuthenticationDetailsSource();
-	
-	/**
-	 * Authenticate with Spring Security based on WebSphere credentials before proceeding with method
-	 * invocation, and clean up the Spring Security Context after method invocation finishes.
-	 * @see org.aopalliance.intercept.MethodInterceptor#invoke(org.aopalliance.intercept.MethodInvocation)
-	 */
-	public Object invoke(MethodInvocation methodInvocation) throws Throwable {
-		try {
-			LOG.debug("Performing Spring Security authentication with WebSphere credentials");
-			authenticateSpringSecurityWithWASCredentials(this);
-			LOG.debug("Proceeding with method invocation");
-			return methodInvocation.proceed();
-		} finally {
-			LOG.debug("Clearing Spring Security security context");
-			clearSpringSecurityContext();
-		}
-	}
-	
-	/**
-	 * Retrieve the current WebSphere credentials and authenticate them with Spring Security
-	 * using the pre-authenticated authentication provider.
-	 * @param aContext The context to use for building the authentication details.
-	 */
-	private final void authenticateSpringSecurityWithWASCredentials(Object aContext)
-	{
-		Assert.notNull(authenticationManager);
-		Assert.notNull(authenticationDetailsSource);
-		
-		String userName = WASSecurityHelper.getCurrentUserName();
-		if (LOG.isDebugEnabled()) { LOG.debug("Creating authentication request for user "+userName); }
-		PreAuthenticatedAuthenticationToken authRequest = new PreAuthenticatedAuthenticationToken(userName,null);
-		authRequest.setDetails(authenticationDetailsSource.buildDetails(null));
-		if (LOG.isDebugEnabled()) { LOG.debug("Authentication request for user "+userName+": "+authRequest); }
-		Authentication authResponse = authenticationManager.authenticate(authRequest);
-		if (LOG.isDebugEnabled()) { LOG.debug("Authentication response for user "+userName+": "+authResponse); }
-		SecurityContextHolder.getContext().setAuthentication(authResponse);
-	}
-	
-	/**
-	 * Clear the Spring Security Context
-	 */
-	private final void clearSpringSecurityContext()
-	{
-		SecurityContextHolder.clearContext();
-	}
+    private static final Log LOG = LogFactory.getLog(WebSphere2SpringSecurityPropagationInterceptor.class);
+    private AuthenticationManager authenticationManager = null;
+    private AuthenticationDetailsSource authenticationDetailsSource = new WebSpherePreAuthenticatedAuthenticationDetailsSource();
+    
+    /**
+     * Authenticate with Spring Security based on WebSphere credentials before proceeding with method
+     * invocation, and clean up the Spring Security Context after method invocation finishes.
+     * @see org.aopalliance.intercept.MethodInterceptor#invoke(org.aopalliance.intercept.MethodInvocation)
+     */
+    public Object invoke(MethodInvocation methodInvocation) throws Throwable {
+        try {
+            LOG.debug("Performing Spring Security authentication with WebSphere credentials");
+            authenticateSpringSecurityWithWASCredentials(this);
+            LOG.debug("Proceeding with method invocation");
+            return methodInvocation.proceed();
+        } finally {
+            LOG.debug("Clearing Spring Security security context");
+            clearSpringSecurityContext();
+        }
+    }
+    
+    /**
+     * Retrieve the current WebSphere credentials and authenticate them with Spring Security
+     * using the pre-authenticated authentication provider.
+     * @param aContext The context to use for building the authentication details.
+     */
+    private final void authenticateSpringSecurityWithWASCredentials(Object aContext)
+    {
+        Assert.notNull(authenticationManager);
+        Assert.notNull(authenticationDetailsSource);
+        
+        String userName = WASSecurityHelper.getCurrentUserName();
+        if (LOG.isDebugEnabled()) { LOG.debug("Creating authentication request for user "+userName); }
+        PreAuthenticatedAuthenticationToken authRequest = new PreAuthenticatedAuthenticationToken(userName,null);
+        authRequest.setDetails(authenticationDetailsSource.buildDetails(null));
+        if (LOG.isDebugEnabled()) { LOG.debug("Authentication request for user "+userName+": "+authRequest); }
+        Authentication authResponse = authenticationManager.authenticate(authRequest);
+        if (LOG.isDebugEnabled()) { LOG.debug("Authentication response for user "+userName+": "+authResponse); }
+        SecurityContextHolder.getContext().setAuthentication(authResponse);
+    }
+    
+    /**
+     * Clear the Spring Security Context
+     */
+    private final void clearSpringSecurityContext()
+    {
+        SecurityContextHolder.clearContext();
+    }
 
-	/**
-	 * @return Returns the authenticationManager.
-	 */
-	public AuthenticationManager getAuthenticationManager() {
-		return authenticationManager;
-	}
-	
-	/**
-	 * @param authenticationManager The authenticationManager to set.
-	 */
-	public void setAuthenticationManager(AuthenticationManager authenticationManager) {
-		this.authenticationManager = authenticationManager;
-	}
-	/**
-	 * @return Returns the authenticationDetailsSource.
-	 */
-	public AuthenticationDetailsSource getAuthenticationDetailsSource() {
-		return authenticationDetailsSource;
-	}
-	/**
-	 * @param authenticationDetailsSource The authenticationDetailsSource to set.
-	 */
-	public void setAuthenticationDetailsSource(AuthenticationDetailsSource authenticationDetailsSource) {
-		this.authenticationDetailsSource = authenticationDetailsSource;
-	}
+    /**
+     * @return Returns the authenticationManager.
+     */
+    public AuthenticationManager getAuthenticationManager() {
+        return authenticationManager;
+    }
+    
+    /**
+     * @param authenticationManager The authenticationManager to set.
+     */
+    public void setAuthenticationManager(AuthenticationManager authenticationManager) {
+        this.authenticationManager = authenticationManager;
+    }
+    /**
+     * @return Returns the authenticationDetailsSource.
+     */
+    public AuthenticationDetailsSource getAuthenticationDetailsSource() {
+        return authenticationDetailsSource;
+    }
+    /**
+     * @param authenticationDetailsSource The authenticationDetailsSource to set.
+     */
+    public void setAuthenticationDetailsSource(AuthenticationDetailsSource authenticationDetailsSource) {
+        this.authenticationDetailsSource = authenticationDetailsSource;
+    }
 }

+ 1 - 2
core/src/main/java/org/springframework/security/ui/preauth/websphere/WebSpherePreAuthenticatedAuthenticationDetailsSource.java

@@ -70,8 +70,7 @@ public class WebSpherePreAuthenticatedAuthenticationDetailsSource extends Authen
         List<String> webSphereGroups = Arrays.asList(WASSecurityHelper.getGroupsForCurrentUser());
         List<GrantedAuthority> userGas = webSphereGroups2GrantedAuthoritiesMapper.getGrantedAuthorities(webSphereGroups);
         if (logger.isDebugEnabled()) {
-            logger.debug("WebSphere groups: " + webSphereGroups + " mapped to Granted Authorities: "
-                    + Arrays.asList(userGas));
+            logger.debug("WebSphere groups: " + webSphereGroups + " mapped to Granted Authorities: " + userGas);
         }
         return userGas;
     }

+ 8 - 8
core/src/main/java/org/springframework/security/ui/preauth/websphere/WebSpherePreAuthenticatedWebAuthenticationDetailsSource.java

@@ -13,12 +13,12 @@ import org.springframework.security.ui.preauth.PreAuthenticatedGrantedAuthoritie
  * @author Ruud Senden
  */
 public class WebSpherePreAuthenticatedWebAuthenticationDetailsSource extends WebSpherePreAuthenticatedAuthenticationDetailsSource {
-	/**
-	 * Public constructor which overrides the default AuthenticationDetails
-	 * class to be used.
-	 */
-	public WebSpherePreAuthenticatedWebAuthenticationDetailsSource() {
-		super();
-		super.setClazz(PreAuthenticatedGrantedAuthoritiesWebAuthenticationDetails.class);
-	}
+    /**
+     * Public constructor which overrides the default AuthenticationDetails
+     * class to be used.
+     */
+    public WebSpherePreAuthenticatedWebAuthenticationDetailsSource() {
+        super();
+        super.setClazz(PreAuthenticatedGrantedAuthoritiesWebAuthenticationDetails.class);
+    }
 }

+ 4 - 4
core/src/main/java/org/springframework/security/ui/rememberme/InMemoryTokenRepositoryImpl.java

@@ -8,16 +8,16 @@ import java.util.Iterator;
 import java.util.Map;
 
 /**
- * Simple <tt>PersistentTokenRepository</tt> implementation backed by a Map. Intended for testing only. 
+ * Simple <tt>PersistentTokenRepository</tt> implementation backed by a Map. Intended for testing only.
  *
  * @author Luke Taylor
  * @version $Id$
  */
 public class InMemoryTokenRepositoryImpl implements PersistentTokenRepository {
-    private Map seriesTokens = new HashMap();
+    private Map<String, PersistentRememberMeToken> seriesTokens = new HashMap<String, PersistentRememberMeToken>();
 
     public synchronized void createNewToken(PersistentRememberMeToken token) {
-        PersistentRememberMeToken current = (PersistentRememberMeToken) seriesTokens.get(token.getSeries());
+        PersistentRememberMeToken current = seriesTokens.get(token.getSeries());
 
         if (current != null) {
             throw new DataIntegrityViolationException("Series Id '"+ token.getSeries() +"' already exists!");
@@ -41,7 +41,7 @@ public class InMemoryTokenRepositoryImpl implements PersistentTokenRepository {
     }
 
     public synchronized void removeUserTokens(String username) {
-        Iterator series = seriesTokens.keySet().iterator();
+        Iterator<String> series = seriesTokens.keySet().iterator();
 
         while (series.hasNext()) {
             Object seriesId = series.next();

+ 9 - 9
core/src/main/java/org/springframework/security/ui/rememberme/JdbcTokenRepositoryImpl.java

@@ -48,10 +48,10 @@ public class JdbcTokenRepositoryImpl extends JdbcDaoSupport implements Persisten
     private String removeUserTokensSql = DEF_REMOVE_USER_TOKENS_SQL;
     private boolean createTableOnStartup;
 
-    protected MappingSqlQuery tokensBySeriesMapping;
-    protected SqlUpdate insertToken;
-    protected SqlUpdate updateToken;
-    protected SqlUpdate removeUserTokens;
+    private MappingSqlQuery<PersistentRememberMeToken> tokensBySeriesMapping;
+    private SqlUpdate insertToken;
+    private SqlUpdate updateToken;
+    private SqlUpdate removeUserTokens;
 
     protected void initDao() {
         tokensBySeriesMapping = new TokensBySeriesMapping(getDataSource());
@@ -111,14 +111,14 @@ public class JdbcTokenRepositoryImpl extends JdbcDaoSupport implements Persisten
 
     //~ Inner Classes ==================================================================================================
 
-    protected class TokensBySeriesMapping extends MappingSqlQuery {
+    private class TokensBySeriesMapping extends MappingSqlQuery<PersistentRememberMeToken> {
         protected TokensBySeriesMapping(DataSource ds) {
             super(ds, tokensBySeriesSql);
             declareParameter(new SqlParameter(Types.VARCHAR));
             compile();
         }
 
-        protected Object mapRow(ResultSet rs, int rowNum) throws SQLException {
+        protected PersistentRememberMeToken mapRow(ResultSet rs, int rowNum) throws SQLException {
             PersistentRememberMeToken token =
                     new PersistentRememberMeToken(rs.getString(1), rs.getString(2), rs.getString(3), rs.getTimestamp(4));
 
@@ -126,7 +126,7 @@ public class JdbcTokenRepositoryImpl extends JdbcDaoSupport implements Persisten
         }
     }
 
-    protected class UpdateToken extends SqlUpdate {
+    private class UpdateToken extends SqlUpdate {
 
         public UpdateToken(DataSource ds) {
             super(ds, updateTokenSql);
@@ -138,7 +138,7 @@ public class JdbcTokenRepositoryImpl extends JdbcDaoSupport implements Persisten
         }
     }
 
-    protected class InsertToken extends SqlUpdate {
+    private class InsertToken extends SqlUpdate {
 
         public InsertToken(DataSource ds) {
             super(ds, insertTokenSql);
@@ -150,7 +150,7 @@ public class JdbcTokenRepositoryImpl extends JdbcDaoSupport implements Persisten
         }
     }
 
-    protected class RemoveUserTokens extends SqlUpdate {
+    private class RemoveUserTokens extends SqlUpdate {
         public RemoveUserTokens(DataSource ds) {
             super(ds, removeUserTokensSql);
             declareParameter(new SqlParameter(Types.VARCHAR));

+ 6 - 6
core/src/main/java/org/springframework/security/ui/rememberme/RememberMeProcessingFilter.java

@@ -63,9 +63,9 @@ public class RememberMeProcessingFilter extends SpringSecurityFilter implements
     //~ Methods ========================================================================================================
 
     public void afterPropertiesSet() throws Exception {
-		Assert.notNull(authenticationManager, "authenticationManager must be specified");
-		Assert.notNull(rememberMeServices, "rememberMeServices must be specified");
-	}
+        Assert.notNull(authenticationManager, "authenticationManager must be specified");
+        Assert.notNull(rememberMeServices, "rememberMeServices must be specified");
+    }
 
     public void doFilterHttp(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
         throws IOException, ServletException {
@@ -76,7 +76,7 @@ public class RememberMeProcessingFilter extends SpringSecurityFilter implements
             if (rememberMeAuth != null) {
                 // Attempt authenticaton via AuthenticationManager
                 try {
-                	rememberMeAuth = authenticationManager.authenticate(rememberMeAuth);
+                    rememberMeAuth = authenticationManager.authenticate(rememberMeAuth);
 
                     // Store to SecurityContextHolder
                     SecurityContextHolder.getContext().setAuthentication(rememberMeAuth);
@@ -122,7 +122,7 @@ public class RememberMeProcessingFilter extends SpringSecurityFilter implements
      * <tt>autoLogin</tt> method and the <tt>AuthenticationManager</tt>.
      */
     protected void onSuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response,
-			Authentication authResult) {
+            Authentication authResult) {
     }
 
     /**
@@ -131,7 +131,7 @@ public class RememberMeProcessingFilter extends SpringSecurityFilter implements
      * token is present in the request and <tt>autoLogin</tt> returns null.
      */
     protected void onUnsuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response,
-			AuthenticationException failed) {
+            AuthenticationException failed) {
     }
 
     public RememberMeServices getRememberMeServices() {

+ 9 - 7
core/src/main/java/org/springframework/security/ui/savedrequest/FastHttpDateFormat.java

@@ -26,8 +26,9 @@ import java.util.TimeZone;
 
 
 /**
- * <p>Utility class to generate HTTP dates.</p>
- * <p>This class is based on code in Apache Tomcat.</p>
+ * Utility class to generate HTTP dates.
+ * <p>
+ * This class is based on code in Apache Tomcat.
  *
  * @author Remy Maucherat
  * @author Andrey Grebnev
@@ -46,7 +47,7 @@ public class FastHttpDateFormat {
             new SimpleDateFormat("EEE MMMM d HH:mm:ss yyyy", Locale.US)
         };
 
-    /** GMT timezone - all HTTP dates are on GMT */
+    /** GMT time zone - all HTTP dates are on GMT */
     protected static final TimeZone gmtZone = TimeZone.getTimeZone("GMT");
 
     static {
@@ -64,10 +65,10 @@ public class FastHttpDateFormat {
     protected static String currentDate = null;
 
     /** Formatter cache. */
-    protected static final HashMap formatCache = new HashMap();
+    protected static final HashMap<Long,String> formatCache = new HashMap<Long,String>();
 
     /** Parser cache. */
-    protected static final HashMap parseCache = new HashMap();
+    protected static final HashMap<String,Long> parseCache = new HashMap<String,Long>();
 
     //~ Methods ========================================================================================================
 
@@ -84,7 +85,7 @@ public class FastHttpDateFormat {
         Long longValue = new Long(value);
 
         try {
-            cachedDate = (String) formatCache.get(longValue);
+            cachedDate = formatCache.get(longValue);
         } catch (Exception e) {}
 
         if (cachedDate != null) {
@@ -163,7 +164,7 @@ public class FastHttpDateFormat {
      * @param value The string to parse
      * @param threadLocalformats Array of formats to use for parsing. If <code>null</code>, HTTP formats are used.
      *
-     * @return Parsed date (or -1 if error occured)
+     * @return Parsed date (or -1 if error occurred)
      */
     public static final long parseDate(String value, DateFormat[] threadLocalformats) {
         Long cachedDate = null;
@@ -205,6 +206,7 @@ public class FastHttpDateFormat {
      * @param key Key to be updated
      * @param value New value
      */
+    @SuppressWarnings("unchecked")
     private static void updateCache(HashMap cache, Object key, Object value) {
         if (value == null) {
             return;

+ 9 - 9
core/src/main/java/org/springframework/security/userdetails/AuthenticationUserDetailsService.java

@@ -12,13 +12,13 @@ import org.springframework.security.Authentication;
  */
 public interface AuthenticationUserDetailsService {
 
-	/**
-	 *
-	 * @param token The pre-authenticated authentication token
-	 * @return UserDetails for the given authentication token, never null.
-	 * @throws UsernameNotFoundException
-	 *             if no user details can be found for the given authentication
-	 *             token
-	 */
-	UserDetails loadUserDetails(Authentication token) throws UsernameNotFoundException;
+    /**
+     *
+     * @param token The pre-authenticated authentication token
+     * @return UserDetails for the given authentication token, never null.
+     * @throws UsernameNotFoundException
+     *             if no user details can be found for the given authentication
+     *             token
+     */
+    UserDetails loadUserDetails(Authentication token) throws UsernameNotFoundException;
 }

+ 26 - 26
core/src/main/java/org/springframework/security/userdetails/UserDetailsByNameServiceWrapper.java

@@ -14,33 +14,33 @@ import org.springframework.util.Assert;
  * @since 2.0
  */
 public class UserDetailsByNameServiceWrapper implements AuthenticationUserDetailsService, InitializingBean {
-	private UserDetailsService userDetailsService = null;
+    private UserDetailsService userDetailsService = null;
 
-	/**
-	 * Check whether all required properties have been set.
-	 *
-	 * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
-	 */
-	public void afterPropertiesSet() throws Exception {
-		Assert.notNull(userDetailsService, "UserDetailsService must be set");
-	}
+    /**
+     * Check whether all required properties have been set.
+     *
+     * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
+     */
+    public void afterPropertiesSet() throws Exception {
+        Assert.notNull(userDetailsService, "UserDetailsService must be set");
+    }
 
-	/**
-	 * Get the UserDetails object from the wrapped UserDetailsService
-	 * implementation
-	 */
-	public UserDetails loadUserDetails(Authentication authentication) throws UsernameNotFoundException,
-			DataAccessException {
-		return userDetailsService.loadUserByUsername(authentication.getName());
-	}
+    /**
+     * Get the UserDetails object from the wrapped UserDetailsService
+     * implementation
+     */
+    public UserDetails loadUserDetails(Authentication authentication) throws UsernameNotFoundException,
+            DataAccessException {
+        return userDetailsService.loadUserByUsername(authentication.getName());
+    }
 
-	/**
-	 * Set the wrapped UserDetailsService implementation
-	 *
-	 * @param aUserDetailsService
-	 *            The wrapped UserDetailsService to set
-	 */
-	public void setUserDetailsService(UserDetailsService aUserDetailsService) {
-		userDetailsService = aUserDetailsService;
-	}
+    /**
+     * Set the wrapped UserDetailsService implementation
+     *
+     * @param aUserDetailsService
+     *            The wrapped UserDetailsService to set
+     */
+    public void setUserDetailsService(UserDetailsService aUserDetailsService) {
+        userDetailsService = aUserDetailsService;
+    }
 }

+ 3 - 0
core/src/main/java/org/springframework/security/userdetails/jdbc/JdbcDaoImpl.java

@@ -186,6 +186,7 @@ public class JdbcDaoImpl extends JdbcDaoSupport implements UserDetailsService {
      * Executes the SQL <tt>usersByUsernameQuery</tt> and returns a list of UserDetails objects.
      * There should normally only be one matching user.
      */
+    @SuppressWarnings("unchecked")
     protected List<UserDetails> loadUsersByUsername(String username) {
         return getJdbcTemplate().query(usersByUsernameQuery, new String[] {username}, new RowMapper() {
             public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
@@ -203,6 +204,7 @@ public class JdbcDaoImpl extends JdbcDaoSupport implements UserDetailsService {
      *
      * @return a list of GrantedAuthority objects for the user
      */
+    @SuppressWarnings("unchecked")
     protected List<GrantedAuthority> loadUserAuthorities(String username) {
         return getJdbcTemplate().query(authoritiesByUsernameQuery, new String[] {username}, new RowMapper() {
             public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
@@ -219,6 +221,7 @@ public class JdbcDaoImpl extends JdbcDaoSupport implements UserDetailsService {
      *
      * @return a list of GrantedAuthority objects for the user
      */
+    @SuppressWarnings("unchecked")
     protected List<GrantedAuthority> loadGroupAuthorities(String username) {
         return getJdbcTemplate().query(groupAuthoritiesByUsernameQuery, new String[] {username}, new RowMapper() {
             public Object mapRow(ResultSet rs, int rowNum) throws SQLException {

+ 6 - 5
core/src/main/java/org/springframework/security/userdetails/jdbc/JdbcUserDetailsManager.java

@@ -189,7 +189,7 @@ public class JdbcUserDetailsManager extends JdbcDaoImpl implements UserDetailsMa
 
         String username = currentUser.getName();
 
-        // If an authentication manager has been set, reauthenticate the user with the supplied password.
+        // If an authentication manager has been set, re-authenticate the user with the supplied password.
         if (authenticationManager != null) {
             logger.debug("Reauthenticating user '"+ username + "' for password change request.");
 
@@ -200,7 +200,7 @@ public class JdbcUserDetailsManager extends JdbcDaoImpl implements UserDetailsMa
 
         logger.debug("Changing password for user '"+ username + "'");
 
-        getJdbcTemplate().update(changePasswordSql, new String[] {newPassword, username});
+        getJdbcTemplate().update(changePasswordSql, newPassword, username);
 
         SecurityContextHolder.getContext().setAuthentication(createNewAuthentication(currentUser, newPassword));
 
@@ -218,7 +218,7 @@ public class JdbcUserDetailsManager extends JdbcDaoImpl implements UserDetailsMa
     }
 
     public boolean userExists(String username) {
-        List users = getJdbcTemplate().queryForList(userExistsSql, new Object[] {username});
+        List<String> users = getJdbcTemplate().queryForList(userExistsSql, new String[] {username}, String.class);
 
         if (users.size() > 1) {
             throw new IncorrectResultSizeDataAccessException("More than one user found with name '" + username + "'", 1);
@@ -245,7 +245,7 @@ public class JdbcUserDetailsManager extends JdbcDaoImpl implements UserDetailsMa
         logger.debug("Creating new group '" + groupName + "' with authorities " +
                 AuthorityUtils.authorityListToSet(authorities));
 
-        getJdbcTemplate().update(insertGroupSql, new String[] {groupName});
+        getJdbcTemplate().update(insertGroupSql, new Object[] {groupName});
 
         final int groupId = findGroupId(groupName);
 
@@ -280,7 +280,7 @@ public class JdbcUserDetailsManager extends JdbcDaoImpl implements UserDetailsMa
         Assert.hasText(oldName);
         Assert.hasText(newName);
 
-        getJdbcTemplate().update(renameGroupSql, new String[] {newName, oldName});
+        getJdbcTemplate().update(renameGroupSql, new Object[] {newName, oldName});
     }
 
     public void addUserToGroup(final String username, final String groupName) {
@@ -316,6 +316,7 @@ public class JdbcUserDetailsManager extends JdbcDaoImpl implements UserDetailsMa
         userCache.removeUserFromCache(username);
     }
 
+    @SuppressWarnings("unchecked")
     public List<GrantedAuthority> findGroupAuthorities(String groupName) {
         logger.debug("Loading authorities for group '" + groupName + "'");
         Assert.hasText(groupName);

+ 77 - 77
core/src/main/java/org/springframework/security/userdetails/ldap/InetOrgPerson.java

@@ -29,19 +29,19 @@ import org.springframework.ldap.core.DirContextOperations;
  * @version $Id$
  */
 public class InetOrgPerson extends Person {    
-	private String carLicense;
-	// Person.cn
+    private String carLicense;
+    // Person.cn
     private String destinationIndicator;
-	private String departmentNumber;
-	// Person.description
-	private String displayName;
-	private String employeeNumber;
-	private String homePhone;
-	private String homePostalAddress;
-	private String initials;
-	private String mail;
-	private String mobile;
-	private String o;
+    private String departmentNumber;
+    // Person.description
+    private String displayName;
+    private String employeeNumber;
+    private String homePhone;
+    private String homePostalAddress;
+    private String initials;
+    private String mail;
+    private String mobile;
+    private String o;
     private String ou;
     private String postalAddress;
     private String postalCode;
@@ -49,7 +49,7 @@ public class InetOrgPerson extends Person {
     private String street;
     // Person.sn
     // Person.telephoneNumber
-	private String title;
+    private String title;
     private String uid;
 
     public String getUid() {
@@ -65,7 +65,7 @@ public class InetOrgPerson extends Person {
     }
     
     public String getInitials() {
-    	return initials;
+        return initials;
     }
 
     public String getDestinationIndicator() {
@@ -73,58 +73,58 @@ public class InetOrgPerson extends Person {
     }
     
     public String getO() {
-		return o;
-	}    
+        return o;
+    }    
 
     public String getOu() {
-		return ou;
-	}
-
-	public String getTitle() {
-		return title;
-	}
-
-	public String getCarLicense() {
-		return carLicense;
-	}
-
-	public String getDepartmentNumber() {
-		return departmentNumber;
-	}
-
-	public String getDisplayName() {
-		return displayName;
-	}
-	
-	public String getHomePhone() {
-		return homePhone;
-	}
-	
-	public String getRoomNumber() {
-		return roomNumber;
-	}
-
-	public String getHomePostalAddress() {
-		return homePostalAddress;
-	}
-
-	public String getMobile() {
-		return mobile;
-	}
-
-	public String getPostalAddress() {
-		return postalAddress;
-	}
-
-	public String getPostalCode() {
-		return postalCode;
-	}
-
-	public String getStreet() {
-		return street;
-	}
-
-	protected void populateContext(DirContextAdapter adapter) {
+        return ou;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public String getCarLicense() {
+        return carLicense;
+    }
+
+    public String getDepartmentNumber() {
+        return departmentNumber;
+    }
+
+    public String getDisplayName() {
+        return displayName;
+    }
+    
+    public String getHomePhone() {
+        return homePhone;
+    }
+    
+    public String getRoomNumber() {
+        return roomNumber;
+    }
+
+    public String getHomePostalAddress() {
+        return homePostalAddress;
+    }
+
+    public String getMobile() {
+        return mobile;
+    }
+
+    public String getPostalAddress() {
+        return postalAddress;
+    }
+
+    public String getPostalCode() {
+        return postalCode;
+    }
+
+    public String getStreet() {
+        return street;
+    }
+
+    protected void populateContext(DirContextAdapter adapter) {
         super.populateContext(adapter);
         adapter.setAttributeValue("carLicense", carLicense);
         adapter.setAttributeValue("departmentNumber", departmentNumber);
@@ -172,7 +172,7 @@ public class InetOrgPerson extends Person {
             setUid(copyMe.getUid());
         }
 
-		public Essence(DirContextOperations ctx) {
+        public Essence(DirContextOperations ctx) {
             super(ctx);
             setCarLicense(ctx.getStringAttribute("carLicense"));
             setDepartmentNumber(ctx.getStringAttribute("departmentNumber"));
@@ -235,8 +235,8 @@ public class InetOrgPerson extends Person {
         }
         
         public void setDepartmentNumber(String departmentNumber) {
-        	((InetOrgPerson) instance).departmentNumber = departmentNumber;
-		}
+            ((InetOrgPerson) instance).departmentNumber = departmentNumber;
+        }
         
         public void setDisplayName(String displayName) {
             ((InetOrgPerson) instance).displayName = displayName;
@@ -255,23 +255,23 @@ public class InetOrgPerson extends Person {
         }  
 
         public void setStreet(String street) {
-        	((InetOrgPerson) instance).street = street;
-		}
+            ((InetOrgPerson) instance).street = street;
+        }
 
         public void setPostalCode(String postalCode) {
-        	((InetOrgPerson) instance).postalCode = postalCode;
-		}
+            ((InetOrgPerson) instance).postalCode = postalCode;
+        }
 
         public void setPostalAddress(String postalAddress) {
-        	((InetOrgPerson) instance).postalAddress = postalAddress;
-		}
+            ((InetOrgPerson) instance).postalAddress = postalAddress;
+        }
 
         public void setMobile(String mobile) {
-        	((InetOrgPerson) instance).mobile = mobile;
-		}
+            ((InetOrgPerson) instance).mobile = mobile;
+        }
 
         public void setHomePostalAddress(String homePostalAddress) {
-        	((InetOrgPerson) instance).homePostalAddress = homePostalAddress;
-		}
+            ((InetOrgPerson) instance).homePostalAddress = homePostalAddress;
+        }
     }
 }

+ 7 - 5
core/src/main/java/org/springframework/security/userdetails/ldap/LdapUserDetailsManager.java

@@ -49,6 +49,7 @@ import javax.naming.directory.BasicAttribute;
 import javax.naming.directory.DirContext;
 import javax.naming.directory.ModificationItem;
 import javax.naming.directory.SearchControls;
+import javax.naming.directory.SearchResult;
 import javax.naming.ldap.LdapContext;
 import java.util.Arrays;
 import java.util.LinkedList;
@@ -107,7 +108,7 @@ public class LdapUserDetailsManager implements UserDetailsManager {
         public Object mapFromAttributes(Attributes attributes) throws NamingException {
             Attribute roleAttr = attributes.get(groupRoleAttributeName);
 
-            NamingEnumeration ne = roleAttr.getAll();
+            NamingEnumeration<?> ne = roleAttr.getAll();
             // assert ne.hasMore();
             Object group = ne.next();
             String role = group.toString();
@@ -204,9 +205,10 @@ public class LdapUserDetailsManager implements UserDetailsManager {
      * @param username the user whose roles are required.
      * @return the granted authorities returned by the group search
      */
+    @SuppressWarnings("unchecked")
     List<GrantedAuthority> getUserAuthorities(final DistinguishedName dn, final String username) {
         SearchExecutor se = new SearchExecutor() {
-            public NamingEnumeration executeSearch(DirContext ctx) throws NamingException {
+            public NamingEnumeration<SearchResult> executeSearch(DirContext ctx) throws NamingException {
                 DistinguishedName fullDn = LdapUtils.getFullDn(dn, ctx);
                 SearchControls ctrls = new SearchControls();
                 ctrls.setReturningAttributes(new String[] {groupRoleAttributeName});
@@ -257,9 +259,9 @@ public class LdapUserDetailsManager implements UserDetailsManager {
         copyToContext(user, ctx);
 
         // Remove the objectclass attribute from the list of mods (if present).
-        List mods = new LinkedList(Arrays.asList(ctx.getModificationItems()));
+        List<ModificationItem> mods = new LinkedList<ModificationItem>(Arrays.asList(ctx.getModificationItems()));
+        ListIterator<ModificationItem> modIt = mods.listIterator();
 
-        ListIterator modIt = mods.listIterator();
         while(modIt.hasNext()) {
             ModificationItem mod = (ModificationItem) modIt.next();
             Attribute a = mod.getAttribute();
@@ -268,7 +270,7 @@ public class LdapUserDetailsManager implements UserDetailsManager {
             }
         }
 
-        template.modifyAttributes(dn, (ModificationItem[]) mods.toArray(new ModificationItem[mods.size()]));
+        template.modifyAttributes(dn, mods.toArray(new ModificationItem[mods.size()]));
 
 //        template.rebind(dn, ctx, null);
         // Remove the old authorities and replace them with the new one

+ 3 - 3
core/src/main/java/org/springframework/security/userdetails/memory/UserMap.java

@@ -38,7 +38,7 @@ public class UserMap {
 
     //~ Instance fields ================================================================================================
 
-    private Map userMap = new HashMap();
+    private Map<String, UserDetails> userMap = new HashMap<String, UserDetails>();
 
     //~ Methods ========================================================================================================
 
@@ -66,7 +66,7 @@ public class UserMap {
      * @throws UsernameNotFoundException if the user could not be found
      */
     public UserDetails getUser(String username) throws UsernameNotFoundException {
-        UserDetails result = (UserDetails) this.userMap.get(username.toLowerCase());
+        UserDetails result = this.userMap.get(username.toLowerCase());
 
         if (result == null) {
             throw new UsernameNotFoundException("Could not find user: " + username, username);
@@ -90,7 +90,7 @@ public class UserMap {
      * @param users {@link Map} &lt;{@link String}, {@link UserDetails}> with pairs (username, userdetails)
      * @since 1.1
      */
-    public void setUsers(Map users) {
+    public void setUsers(Map<String, UserDetails> users) {
         this.userMap = users;
     }
 }

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác