Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
    * JBoss, Home of Professional Open Source
    * Copyright 2007, JBoss Inc., and individual contributors as indicated
    * by the @authors tag. See the copyright.txt in the distribution for a
    * full listing of individual contributors.
    *
    * This is free software; you can redistribute it and/or modify it
    * under the terms of the GNU Lesser General Public License as
    * published by the Free Software Foundation; either version 2.1 of
   * the License, or (at your option) any later version.
   *
   * This software is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
   * Lesser General Public License for more details.
   *
   * You should have received a copy of the GNU Lesser General Public
   * License along with this software; if not, write to the Free
   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
   */
 package org.jboss.security.plugins.acl;
 
 import java.util.Map;
 import java.util.Set;
 
 
 //$Id$
 
Default Implementation of ACLContext

Author(s):
Anil.Saldhana@redhat.com
Version:
$Revision$
Since:
Jan 30, 2008
 
 public class JBossACLContext extends ACLContext
 {
    private static Logger log = Logger.getLogger(JBossACLContext.class);
    private boolean trace = .isTraceEnabled();  
    
    public JBossACLContext(String name)
    {
       this. = name;
    }
 
    @Override
    public <T> EntitlementHolder<T> getEntitlements(final Class<T> clazz
          final Resource resourcefinal Identity identity
    throws AuthorizationException
    {
       Set<T> aggregateEntitlements = null;
       
       try
       {
          initializeModules(resourceidentity);
       }
       catch (PrivilegedActionException e1)
       {
          throw new RuntimeException(e1);
       } 
       //Do a PrivilegedAction
       try
       {
          aggregateEntitlements = AccessController.doPrivileged(new PrivilegedExceptionAction<Set<T>>() 
          {
             public Set<T> run() throws AuthorizationException 
             {
                Set<T> entitlements = invokeACL(clazz,resource,identity); 
                invokeTeardown();
                 
                return entitlements;
             }
          });
       }
       catch (PrivilegedActionException e)
       {
          Exception exc = e.getException();
          if()
            .trace("Error in authorize:"exc); 
          invokeTeardown();
          throw ((AuthorizationException)exc);
       }
       
       final Set<T> result = aggregateEntitlements;
      return new EntitlementHolder<T>()
      { 
         public Set<T> getEntitled()
         {
            return result;
         }
      };
   }
   
   private void initializeModules(Resource resourceIdentity identity
   { 
      ACLInfo aclInfo = getACLInfo(resource); 
      if(aclInfo == null)
         throw new IllegalStateException("ACL Info is null");
      ACLProviderEntry[] entries = aclInfo.getACLProviderEntry();
      int len = entries != null ? entries.length : 0;
      for(int i = 0 ; i < leni++)
      {
         ACLProviderEntry entry = entries[i]; 
         .add(instantiateModule(entry.getAclProviderName(), 
                     entry.getOptions())); 
      }
   }
   
   private ACLProvider instantiateModule(String name
         Map<String,Objectmap
   {
      ACLProvider am = null;
      ClassLoader tcl = SecurityActions.getContextClassLoader();
      try
      {
         Class<?> clazz = tcl.loadClass(name);
         am = (ACLProvider)clazz.newInstance();
      }
      catch ( Exception e)
      {
         .debug("Error instantiating AuthorizationModule:",e);
      } 
      if(am == null)
         throw new IllegalStateException("ACLProvider has not " +
               "been instantiated"); 
      am.initialize(this.,map); 
      return am;
   }
    
   private <T> Set<T> invokeACL(Class<T> clazzResource resourceIdentity identity
   {   
      Set<T> entitlements = new HashSet<T>();
      int length = .size();
      for(int i = 0; i < lengthi++)
      {
         ACLProvider module = (ACLProvider).get(i);  
         try
         {
            Set<T> er = module.getEntitlements(clazzresourceidentity);
            if(er == null)
               throw new AuthorizationException("module "+module.getClass().getName()
                     +" generated null entitlements.");
            entitlements.addAll(er);
         }
         catch(Exception ae)
         { 
            throw new AuthorizationException(ae.getMessage());
         }
      }
      return entitlements;
   }
   
   private ACLInfo getACLInfo(String domainNameResource resource)
   { 
      ApplicationPolicy aPolicy = SecurityConfiguration.getApplicationPolicy(domainName); 
      
      if(aPolicy == null)
      {
         if()
            .trace("Application Policy not obtained for domain="domainName +
                         ". Trying to obtain the App policy for the default domain of the layer:");
         aPolicy = SecurityConfiguration.getApplicationPolicy(resource.getLayer().name());  
      }
      if(aPolicy == null)
         throw new IllegalStateException("Application Policy is null for domain:"domainName);
      
      return aPolicy.getAclInfo(); 
   } 
   
   private void invokeTeardown()
   {
      int length = .size();
      for(int i = 0; i < lengthi++)
      {
         ACLProvider module = (ACLProvider).get(i); 
         boolean bool = module.tearDown();
         if(!bool)
            throw new AuthorizationException("TearDown on module failed:"+module.getClass());
      } 
      .clear();
   }
   public String toString()
   {
      StringBuilder builder = new StringBuilder();
      builder.append("[").append(getClass().getCanonicalName()).append("()");
      builder.append(this.).append(")]"); 
      return builder.toString();
   } 
New to GrepCode? Check out our FAQ X