Index: topia-security/src/java/org/codelutin/topia/security/jaas/TopiaPolicy.java diff -u topia-security/src/java/org/codelutin/topia/security/jaas/TopiaPolicy.java:1.2 topia-security/src/java/org/codelutin/topia/security/jaas/TopiaPolicy.java:1.3 --- topia-security/src/java/org/codelutin/topia/security/jaas/TopiaPolicy.java:1.2 Thu Sep 14 13:41:59 2006 +++ topia-security/src/java/org/codelutin/topia/security/jaas/TopiaPolicy.java Thu Sep 14 14:34:52 2006 @@ -24,9 +24,9 @@ * Created: 17 févr. 2006 * * @author Arnaud Thimel - * @version $Revision: 1.2 $ + * @version $Revision: 1.3 $ * - * Mise a jour: $Date: 2006/09/14 13:41:59 $ + * Mise a jour: $Date: 2006/09/14 14:34:52 $ * par : $Author: ruchaud $ */ @@ -38,17 +38,17 @@ import java.security.Policy; import java.security.ProtectionDomain; import java.util.Collection; +import java.util.HashMap; +import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.codelutin.topia.TopiaException; import org.codelutin.topia.security.TopiaSecurityManager; import org.codelutin.topia.security.entities.authorization.TopiaAuthorization; -import org.codelutin.topia.security.entities.authorization.TopiaAuthorizationDAO; import org.codelutin.topia.security.entities.authorization.TopiaEntityAuthorization; import org.codelutin.topia.security.entities.authorization.TopiaEntityAuthorizationDAO; - public class TopiaPolicy extends Policy { private Log log = LogFactory.getLog(TopiaPolicy.class); @@ -57,11 +57,12 @@ protected Policy parentPolicy; - //TODO: Faire un cache pour éviter les instanciations inutiles - + private Map permissionsCache; + public TopiaPolicy(TopiaSecurityManager securityManager) { super(); this.securityManager = securityManager; + this.permissionsCache = new HashMap(); } /** @@ -101,9 +102,16 @@ if (entityAuthorizationDAO != null) { try { Collection authorizations = entityAuthorizationDAO.findAll(); + Map newPermissionsCache = new HashMap(); for (TopiaEntityAuthorization authorization : authorizations) { - pc.add(new TopiaPermission(authorization)); + TopiaPermission topiaPermission = permissionsCache.get(authorization); + if(topiaPermission == null) { + topiaPermission = new TopiaPermission(authorization); + } + newPermissionsCache.put(authorization, topiaPermission); + pc.add(topiaPermission); } + permissionsCache = newPermissionsCache; } catch (TopiaException te) { log.error("Récupération des TopiaPermission impossible", te); }