J'essaie d'implémenter la Security Spring Security ACL dans un projet. Après avoir construit la partie de configuration principale et créer le schéma de la base de données, j'essaie de créer des ACES et de laisser la magie se produire. Mais je suis confronté à cette exception encore et encore mes pièces de configuration de base p> Il semble que je manque quelque chose parce que La transaction doit être active via la transactionproxy. P> Accéder au service dans un contrôleur de cette façon p>
3 Réponses :
Essayez de couvrir les méthodes Calling AcLService avec un modèle de transaction:
TransactionTemplate tt = new TransactionTemplate(transactionManager); tt.execute(new TransactionCallbackWithoutResult() { @Override protected void doInTransactionWithoutResult(TransactionStatus status) { ObjectIdentity oid = new ObjectId entityImpl(clazz.getCanonicalName(), securedObject.getId()); // your aclService operation here: aclService.deleteAcl(oid, true); } });
6 ans plus tard, j'ai heurté le même problème et j'ai trouvé cela très utile. Juste un commentaire mineur: la transaction est affirmée lors de la création d'enregistrements de classe ou de SID à des fins de synchronisation. Il n'est pas nécessaire de faire fonctionner une transaction pour DeletaCl ()
L'erreur que vous avez mentionnée ne se produit que lorsque le SID n'est pas présent dans la table ACL_SID et est inséré par Spring ACL automatiquement. Essayez d'ajouter les lignes manuellement et retentissez-vous le code. Cela a fonctionné pour moi. P>
Reportez-vous http://forum.springsource.org /ShowTthread.php?55490-ACL-Transaction-Must-be-Running P>
L'annotation @TransAdratage au-dessus de la méthode ou du service (contenant la méthode) peut résoudre le problème. P>
C'est la réponse la plus simple, même si je ne suis pas sûr de la manière dont le soutien à cette annotation était de retour en 2011 lol