Beispiel #1
0
  /**
   * Create the set of roles the user belongs to by parsing the roles.properties data for
   * username=role1,role2,... and username.XXX=role1,role2,... patterns.
   *
   * @param targetUser - the username to obtain roles for
   * @param roles - the Properties containing the user=roles mappings
   * @param roleGroupSeperator - the character that seperates a username from a group name, e.g.,
   *     targetUser[.GroupName]=roles
   * @param aslm - the login module to use for Principal creation
   * @return Group[] containing the sets of roles
   */
  static Group[] getRoleSets(
      String targetUser,
      Properties roles,
      char roleGroupSeperator,
      AbstractServerLoginModule aslm) {
    Enumeration<?> users = roles.propertyNames();
    SimpleGroup rolesGroup = new SimpleGroup("Roles");
    ArrayList<Group> groups = new ArrayList<Group>();
    groups.add(rolesGroup);
    while (users.hasMoreElements() && targetUser != null) {
      String user = (String) users.nextElement();
      String value = roles.getProperty(user);

      // See if this entry is of the form targetUser[.GroupName]=roles
      // JBAS-3742 - skip potential '.' in targetUser
      int index = user.indexOf(roleGroupSeperator, targetUser.length());
      boolean isRoleGroup = false;
      boolean userMatch = false;
      if (index > 0 && targetUser.regionMatches(0, user, 0, index) == true) isRoleGroup = true;
      else userMatch = targetUser.equals(user);

      String groupName = "Roles";
      // Check for username.RoleGroup pattern
      if (isRoleGroup == true) {
        groupName = user.substring(index + 1);
        PicketBoxLogger.LOGGER.traceAdditionOfRoleToGroup(value, groupName);
        if (groupName.equals("Roles")) {
          parseGroupMembers(rolesGroup, value, aslm);
        } else {
          SimpleGroup group = new SimpleGroup(groupName);
          parseGroupMembers(group, value, aslm);
          groups.add(group);
        }
      } else if (userMatch == true) {
        PicketBoxLogger.LOGGER.traceAdditionOfRoleToGroup(value, groupName);
        // Place these roles into the Default "Roles" group
        parseGroupMembers(rolesGroup, value, aslm);
      }
    }
    Group[] roleSets = new Group[groups.size()];
    groups.toArray(roleSets);
    return roleSets;
  }