Skip to content
GMSClient.java 38.8 KiB
Newer Older
    protected void setCachedGroups(Principal userID, List<Group> groups, Role role)
    {
        AccessControlContext acContext = AccessController.getContext();
        Subject subject = Subject.getSubject(acContext);
        
        // only save to cache if the userID is of the calling subject
        if (userIsSubject(userID, subject))
            log.debug("Caching groups for " + userID + ", role " + role);
            
            GroupMemberships groupCredentials = null;
            Set groupCredentialSet = subject.getPrivateCredentials(GroupMemberships.class);
            if ((groupCredentialSet != null) && 
                (groupCredentialSet.size() == 1))
            {
                Iterator i = groupCredentialSet.iterator();
                groupCredentials = ((GroupMemberships) i.next());
            }
            else
            {
                groupCredentials = new GroupMemberships();
                subject.getPrivateCredentials().add(groupCredentials);
            }
            
            groupCredentials.memberships.put(role,  groups);
        }
    }
    
    protected boolean userIsSubject(Principal userID, Subject subject)
    {
        if (userID == null || subject == null)
        {
            return false;
        }
        
        Set<Principal> subjectPrincipals = subject.getPrincipals();
        Iterator<Principal> i = subjectPrincipals.iterator();
        Principal next = null;
        while (i.hasNext())
        {
            next = i.next();
            if (next.equals(userID))
            {
                return true;
            }
        return false;
Jeff Burke's avatar
Jeff Burke committed
    /**
     * Class used to hold list of groups in which
     * a user is a member.
     */
    protected class GroupMemberships
        Map<Role, List<Group>> memberships = new HashMap<Role, List<Group>>();
        protected GroupMemberships()