User: stark   
  Date: 01/02/14 13:20:11

  Modified:    security/src/main/org/jboss/test/security/test/ejbs/project
                        ProjRepositoryBean.java
  Added:       security/src/main/org/jboss/test/security/test/ejbs/project
                        ProjRepositorySecurityProxy.java
                        ProjRepositorySecurityProxy2.java
  Removed:     security/src/main/org/jboss/test/security/test/ejbs/project
                        ProjRepositoryStatefulProxy.java
                        ProjRepositoryStatelessProxy.java
  Log:
  Updated SecurityInterceptor to be independent of any JAAS classes
  and refactored security proxy layer to simplify the model.
  
  Revision  Changes    Path
  1.2       +12 -1     
contrib/security/src/main/org/jboss/test/security/test/ejbs/project/ProjRepositoryBean.java
  
  Index: ProjRepositoryBean.java
  ===================================================================
  RCS file: 
/products/cvs/ejboss/contrib/security/src/main/org/jboss/test/security/test/ejbs/project/ProjRepositoryBean.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ProjRepositoryBean.java   2001/02/12 09:29:43     1.1
  +++ ProjRepositoryBean.java   2001/02/14 21:20:10     1.2
  @@ -18,6 +18,8 @@
   
   import org.jboss.test.security.test.ejbs.project.interfaces.IProjRepository;
   import org.jboss.test.security.test.ejbs.project.support.HeirMemoryMap;
  +import org.jboss.test.security.test.ejbs.project.interfaces.ProjRepositoryHome;
  +import org.jboss.test.security.test.ejbs.project.interfaces.ProjRepository;
   
   /** The ProjRepository session bean implementation. This is a trivial
   implementation that always creates the same set of project data.
  @@ -26,13 +28,22 @@
   @see javax.naming.directory.Attributes
   
   @author [EMAIL PROTECTED]
  -@version $Revision: 1.1 $
  +@version $Revision: 1.2 $
   */
   public class ProjRepositoryBean implements SessionBean, IProjRepository
   {
       private SessionContext context;
       private HeirMemoryMap projRepository;
   
  +    /** @link dependency 
  +     * @clientRole implementation
  +     * @supplierRole home*/
  +    /*#ProjRepositoryHome lnkProjRepositoryHome;*/
  +
  +    /** @link dependency 
  +     * @supplierRole remote
  +     * @clientRole implementation*/
  +    /*#ProjRepository lnkProjRepository;*/
   // --- Begin IProjRepository interface methods
       public void createFolder(Name folderPath) throws NamingException, 
RemoteException
       {
  
  
  
  1.1                  
contrib/security/src/main/org/jboss/test/security/test/ejbs/project/ProjRepositorySecurityProxy.java
  
  Index: ProjRepositorySecurityProxy.java
  ===================================================================
  /*
   * JBoss, the OpenSource EJB server
   *
   * Distributable under LGPL license.
   * See terms of license at gnu.org.
   */
  package org.jboss.test.security.test.ejbs.project;
  
  import java.lang.reflect.InvocationTargetException;
  import java.lang.reflect.Method;
  import java.rmi.RemoteException;
  import java.security.Principal;
  import java.security.PrivilegedExceptionAction;
  import java.security.PrivilegedActionException;
  import javax.ejb.EJBContext;
  import javax.naming.Name;
  import javax.naming.NamingException;
  import javax.naming.directory.Attribute;
  import javax.naming.directory.Attributes;
  
  import org.jboss.security.SecurityProxy;
  import org.jboss.test.security.test.ejbs.project.interfaces.IProjRepository;
  
  /** An example implementation of SecurityProxy for the ProjRepository bean.
  
  @see org.jboss.ejb.plugins.SecurityProxy
  @see javax.naming.Name
  @see javax.naming.directory.Attributes
  @see org.jboss.test.security.test.ejbs.project.interfaces.IProjRepository
  
  @author [EMAIL PROTECTED]
  @version $Revision: 1.1 $
  */
  public class ProjRepositorySecurityProxy implements SecurityProxy, IProjRepository
  {
      /**
       * @label bean
       * @clientRole state sink
       * @supplierRole state source 
       */
      private IProjRepository projRepository;
      private EJBContext ctx;
  
  // --- Begin SecurityProxy interface methods
      public void init(Class beanHome,Class beanRemote,Object securityMgr) throws 
InstantiationException
      {
      }
  
      public void setEJBContext(EJBContext ctx)
      {
          this.ctx = ctx;
          System.out.println("ProjRepositorySecurityProxy.setEJBContext, ctx="+ctx);
      }
  
      public void invokeHome(Method m,Object[] args) throws SecurityException
      {
      }
   
      public void invoke(Method m,Object[] args,Object bean) throws SecurityException
      {
          projRepository = (IProjRepository) bean;
          System.out.println("ProjRepositorySecurityProxy.invoke, 
bean="+projRepository);
      }
  // --- End SecurityProxy interface methods
  
  // --- Begin IProjRepository interface methods
      public void createFolder(Name folderPath)
      {
          System.out.println("ProjRepositorySecurityProxy.createFolder, 
folderPath="+folderPath);
      }
      
      public void deleteFolder(Name folderPath,boolean recursive)
      {
          System.out.println("ProjRepositorySecurityProxy.deleteFolder, 
folderPath="+folderPath);
      }
      
      public void createItem(Name itemPath,Attributes attributes)
      {
          System.out.println("ProjRepositorySecurityProxy.createItem, 
itemPath="+itemPath);
      }
      
      public void updateItem(Name itemPath,Attributes attributes)
      {
          System.out.println("ProjRepositorySecurityProxy.updateItem, 
itemPath="+itemPath);
      }
      
      public void deleteItem(Name itemPath)
      {
          Principal user = ctx.getCallerPrincipal();
          String userID = user.getName();
          System.out.println("ProjRepositorySecurityProxy.deleteItem, 
itemPath="+itemPath);
          // Only the item owner can delete it
          String owner = null;
          try
          {
              Attributes attributes = projRepository.getItem(itemPath);
              if( attributes != null )
              {
                  Attribute attr = attributes.get("owner");
                  if( attr != null )
                      owner = (String) attr.get();
              }
          }
          catch(Exception e)
          {
              e.printStackTrace();
              throw new SecurityException("Failed to obtain owner for: "+itemPath);
          }
  
          if( owner == null )
              throw new SecurityException("No owner assigned to: "+itemPath);
          if( owner.equals(userID) == false )
              throw new SecurityException("User: "+userID+" is not the owner of: 
"+itemPath);
      }
  
      public Attributes getItem(Name itemPath)
      {
          System.out.println("ProjRepositorySecurityProxy.getItem, 
itemPath="+itemPath);
          return null;
      }
      
  // --- End IProjRepository interface methods
  
  }
  
  
  
  1.1                  
contrib/security/src/main/org/jboss/test/security/test/ejbs/project/ProjRepositorySecurityProxy2.java
  
  Index: ProjRepositorySecurityProxy2.java
  ===================================================================
  /*
   * JBoss, the OpenSource EJB server
   *
   * Distributable under LGPL license.
   * See terms of license at gnu.org.
   */
  package org.jboss.test.security.test.ejbs.project;
  
  import java.rmi.RemoteException;
  import java.security.AccessController;
  import java.security.Principal;
  import javax.ejb.EJBContext;
  import javax.naming.Name;
  import javax.naming.NamingException;
  import javax.naming.directory.Attribute;
  import javax.naming.directory.Attributes;
  
  import org.jboss.test.security.test.NamespacePermission;
  import org.jboss.test.security.test.ejbs.project.interfaces.IProjRepository;
  
  /** A simple stateful security proxy example for the ProjRepository bean.
  
  @see javax.naming.Name
  @see javax.naming.directory.Attributes
  @see org.jboss.test.security.test.ejbs.project.interfaces.IProjRepository
  
  @author [EMAIL PROTECTED]
  @version $Revision: 1.1 $
  */
  public class ProjRepositorySecurityProxy2 implements IProjRepository
  {
      /**
       * @label bean
       * @clientRole state sink
       * @supplierRole state source 
       */
      private IProjRepository projRepository;
      private EJBContext ctx;
  
      public void setEJBContext(EJBContext ctx)
      {
          this.ctx = ctx;
          System.out.println("ProjRepositorySecurityProxy2.setEJBContext, ctx="+ctx);
      }
      public void setBean(Object bean)
      {
          projRepository = (IProjRepository) bean;
          System.out.println("ProjRepositorySecurityProxy2.setBean, 
bean="+projRepository);
      }
  
      public void ejbCreate(Name projectName)
      {
          Principal user = ctx.getCallerPrincipal();
          String userID = user.getName();
          System.out.println("ProjRepositorySecurityProxy2.ejbCreate, 
projectName="+projectName);
          // Only scott or starksm can create project sessions
          if( userID.equals("scott") == false && userID.equals("starksm") == false )
              throw new SecurityException("Invalid project userID: "+userID);
      }
  
  // --- Begin IProjRepository interface methods
      public void createFolder(Name folderPath)
      {
          System.out.println("ProjRepositorySecurityProxy2.createFolder, 
folderPath="+folderPath);
      }
      
      public void deleteFolder(Name folderPath,boolean recursive)
      {
          System.out.println("ProjRepositorySecurityProxy2.deleteFolder, 
folderPath="+folderPath);
      }
      
      public void createItem(Name itemPath,Attributes attributes)
      {
          System.out.println("ProjRepositorySecurityProxy2.createItem, 
itemPath="+itemPath);
      }
      
      public void updateItem(Name itemPath,Attributes attributes)
      {
          System.out.println("ProjRepositorySecurityProxy2.updateItem, 
itemPath="+itemPath);
      }
      
      public void deleteItem(Name itemPath)
      {
          Principal user = ctx.getCallerPrincipal();
          String userID = user.getName();
          System.out.println("ProjRepositorySecurityProxy2.deleteItem, 
itemPath="+itemPath);
          // Only the item owner can delete it
          String owner = null;
          try
          {
              Attributes attributes = projRepository.getItem(itemPath);
              if( attributes != null )
              {
                  Attribute attr = attributes.get("owner");
                  if( attr != null )
                      owner = (String) attr.get();
              }
          }
          catch(Exception e)
          {
              e.printStackTrace();
              throw new SecurityException("Failed to obtain owner for: "+itemPath);
          }
  
          if( owner == null )
              throw new SecurityException("No owner assigned to: "+itemPath);
          if( owner.equals(userID) == false )
              throw new SecurityException("User: "+userID+" is not the owner of: 
"+itemPath);
      }
  
      public Attributes getItem(Name itemPath)
      {
          NamespacePermission p = new NamespacePermission(itemPath, "r---");
          AccessController.checkPermission(p);
          System.out.println("ProjRepositorySecurityProxy2.getItem, 
itemPath="+itemPath);
          return null;
      }
  // --- End IProjRepository interface methods
  
  }
  
  
  

Reply via email to