2010-05-13 6 views
0

Je travaille à cette tâche trop longtemps d'abandonner l'idée d'utiliser Spring Security pour y parvenir, mais je souhaite que la communauté fournira un soutien qui aidera à réduire le regret que j'ai d'avoir choisi Spring Security. Assez rodomontades et maintenant nous allons arriver au point.Spring Security ACL: NotFoundException de JDBCMutableAclService.createAcl

Je suis en train de créer une ACL en utilisant JDBCMutableAclService.createAcl comme suit:

public void addPermission(IWFArtifact securedObject, Sid recipient, Permission permission, 
    Class clazz) { 
    ObjectIdentity oid = new ObjectIdentityImpl(clazz.getCanonicalName(), securedObject.getId()); 
    this.addPermission(oid, recipient, permission); 
} 

@Override 
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_UNCOMMITTED, readOnly = false) 
public void addPermission(ObjectIdentity oid, Sid recipient, Permission permission) { 
    SpringSecurityUtils.assureThreadLocalAuthSet(); 

    MutableAcl acl; 

    try { 
    acl = this.mutableAclService.createAcl(oid); 
    } catch (AlreadyExistsException e) { 
    acl = (MutableAcl) this.mutableAclService.readAclById(oid); 
    } 
// try { 
// acl = (MutableAcl) this.mutableAclService.readAclById(oid); 
// } catch (NotFoundException nfe) { 
// acl = this.mutableAclService.createAcl(oid); 
// } 

    acl.insertAce(acl.getEntries().length, permission, recipient, true); 
    this.mutableAclService.updateAcl(acl); 

} 

L'appel jette un NotFoundException de la ligne:

// Retrieve the ACL via superclass (ensures cache registration, proper retrieval etc) 
    Acl acl = readAclById(objectIdentity); 

Je crois que cela est causé par quelque chose lié à transactionnelles, et voilà pourquoi je l'ai testé avec de nombreux attributs de TransactionDefinition. J'ai aussi mis en doute l'annotation et essayé avec la définition déclarative des transactions, mais toujours sans succès. Un point important est que j'ai utilisé l'instruction utilisée pour insérer l'OID dans la base de données plus tôt dans la base de données et cela a fonctionné, et a également jeté une exception de contrainte unique quand il a essayé de l'insérer dans la méthode. J'utilise Spring Security 2.0.8 et IceFaces 1.8 (qui ne supporte pas le ressort 3.0 mais qui supprime définitivement le 2.0.x, surtout quand je continue d'appeler SpringSecurityUtils.assureThreadLocalAuthSet()) Mon AppServer est Tomcat 6.0 et mon serveur DB est MySQL 6.0

Je souhaite revenir une réponse bientôt parce que je dois obtenir cette tâche de mon chemin

Répondre

1

Votre code n'est pas formaté très bien à comprendre sur quelle erreur de ligne est lancée. Quoi qu'il en soit un NotFoundException doit attrapée et créer une nouvelle acl:

try { 
    acl = (MutableAcl) mutableAclService.readAclById(oi); 
} 
catch (NotFoundException e) { 
    acl = mutableAclService.createAcl(oi); 
}