juergen     2002/10/01 23:29:44

  Modified:    src/share/org/apache/slide/security SecurityImpl.java
  Log:
  improved performance by caching allready checked permissions for the current method 
call in the SlideToken. (eckehard)
  
  Revision  Changes    Path
  1.32      +27 -4     
jakarta-slide/src/share/org/apache/slide/security/SecurityImpl.java
  
  Index: SecurityImpl.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-slide/src/share/org/apache/slide/security/SecurityImpl.java,v
  retrieving revision 1.31
  retrieving revision 1.32
  diff -u -r1.31 -r1.32
  --- SecurityImpl.java 25 Apr 2002 21:30:16 -0000      1.31
  +++ SecurityImpl.java 2 Oct 2002 06:29:44 -0000       1.32
  @@ -65,6 +65,7 @@
   
   import java.util.Enumeration;
   import java.util.Hashtable;
  +import java.util.HashMap;
   import java.util.Vector;
   import java.lang.reflect.Constructor;
   import java.lang.reflect.InvocationTargetException;
  @@ -376,7 +377,27 @@
                   ObjectNode realObject = objectUri.getStore()
                       .retrieveObject(objectUri);
                   SubjectNode subject = (SubjectNode) getPrincipal(token);
  +                // check if permission has already been checked
  +                Boolean permission = token.checkPermissionCache(object, action);
  +                if (permission == null) {
  +                    // if not checked before, check now
  +                    try {
                   checkPermission(realObject, subject, action);
  +                        token.cachePermission(object, action, true);
  +                    } catch (AccessDeniedException ade) {
  +                        token.cachePermission(object, action, false);
  +                        ade.fillInStackTrace();
  +                        throw ade;
  +                    }
  +                } else {
  +                    
  +                    if (!(permission.booleanValue())) {
  +                        throw new AccessDeniedException
  +                            (object.getUri(),
  +                            token.getCredentialsToken().getPublicCredentials(),
  +                            action.getUri());
  +                    }
  +                }
               }
           } catch (ObjectNotFoundException e) {
               throw new AccessDeniedException
  @@ -436,6 +457,8 @@
           
           Uri subjectUri = namespace.getUri(subject.getUri());
           Uri actionUri = namespace.getUri(action.getUri());
  +
  +        // check if allready granded
   
           while (!granted && !denied && !rootObjectReached) {
               
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to