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]>