[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