[jboss-cvs] JBossAS SVN: r57243 - projects/security/trunk/src/main/org/jboss/security/mapping/providers

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Sep 27 17:04:26 EDT 2006


Author: anil.saldhana at jboss.com
Date: 2006-09-27 17:04:25 -0400 (Wed, 27 Sep 2006)
New Revision: 57243

Modified:
   projects/security/trunk/src/main/org/jboss/security/mapping/providers/OptionsRoleMappingProvider.java
Log:
Do not modify while iterating the list

Modified: projects/security/trunk/src/main/org/jboss/security/mapping/providers/OptionsRoleMappingProvider.java
===================================================================
--- projects/security/trunk/src/main/org/jboss/security/mapping/providers/OptionsRoleMappingProvider.java	2006-09-27 21:03:17 UTC (rev 57242)
+++ projects/security/trunk/src/main/org/jboss/security/mapping/providers/OptionsRoleMappingProvider.java	2006-09-27 21:04:25 UTC (rev 57243)
@@ -9,6 +9,7 @@
 import java.lang.reflect.Constructor; 
 import java.security.Principal;
 import java.security.acl.Group;
+import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.Map;
 import java.util.Properties;
@@ -60,31 +61,45 @@
    }
 
    public Object performMapping(Map contextMap)
-   {
-     Group roles = (Group)contextMap.get(SecurityConstants.ROLES_IDENTIFIER);
-     if(roles == null)
-        throw new IllegalArgumentException("Group called Roles not found");
-     
-     //Enumerate over the members
-     Enumeration enumer = roles.members();
-     while(enumer.hasMoreElements())
-     {
-        Principal p = (Principal)enumer.nextElement();
-        String name = p.getName(); 
-        String commaSeparatedRoles = roleMapProperties.getProperty(name);
-        if(commaSeparatedRoles != null)
-        {
-           String[] tokens = getRolesFromCommaSeparatedString(commaSeparatedRoles);
-           int len = tokens != null ? tokens.length : 0;
-           for(int i = 0; i < len; i++)
-           {
-              if(this.REPLACE_ROLES)
-                 roles.removeMember(p);
-              roles.addMember(instantiatePrincipal(p.getClass(),tokens[i])); 
-           }
-        } 
-     }
-     return roles;
+   { 
+      ArrayList<Principal> removeMembers = new ArrayList<Principal>();
+      ArrayList<Principal> addMembers = new ArrayList<Principal>();
+
+      Group roles = (Group)contextMap.get(SecurityConstants.ROLES_IDENTIFIER);
+      if(roles == null)
+         throw new IllegalArgumentException("Group called Roles not found");
+
+      //Enumerate over the members
+      Enumeration enumer = roles.members();
+      while(enumer.hasMoreElements())
+      {
+         Principal p = (Principal)enumer.nextElement();
+         String name = p.getName(); 
+         String commaSeparatedRoles = roleMapProperties.getProperty(name);
+         if(commaSeparatedRoles != null)
+         {
+            String[] tokens = getRolesFromCommaSeparatedString(commaSeparatedRoles);
+            int len = tokens != null ? tokens.length : 0;
+            for(int i = 0; i < len; i++)
+            {
+               if(this.REPLACE_ROLES)
+                  removeMembers.add(p); 
+               addMembers.add(instantiatePrincipal(p.getClass(),tokens[i])); 
+            }
+         } 
+      }
+      //Go through  the remove list
+      for(Principal p:removeMembers)
+      {
+         roles.removeMember(p);
+      }
+      //Go through the add list
+      for(Principal p:addMembers)
+      {
+         roles.addMember(p);
+      }
+
+      return roles;
    } 
    
    private String[] getRolesFromCommaSeparatedString(String str)




More information about the jboss-cvs-commits mailing list