Я слишком долго работал над этой задачей, чтобы отказаться от идеи использования Spring Security для ее достижения, но я хотел бы, чтобы сообщество оказало некоторую поддержку, которая поможет уменьшить сожаление, которое я испытываю по поводу выбора Spring Security. , Хватит разглагольствовать, а теперь давайте перейдем к делу.
Я пытаюсь создать ACL с помощью JDBCMutableAclService.createAcl следующим образом:
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);
}
Вызов вызывает исключение NotFoundException из строки:
// Retrieve the ACL via superclass (ensures cache registration, proper retrieval etc)
Acl acl = readAclById(objectIdentity);
Я полагаю, что это вызвано чем-то связанным с Transactional, и поэтому я протестировал многие атрибуты TransactionDefinition. Я также усомнился в аннотации и попробовал с декларативным определением транзакции, но все же безуспешно.
Одним из важных моментов является то, что я использовал оператор, использованный для вставки oid в базу данных ранее в методе непосредственно в базе данных, и он сработал, а также вызвал уникальное исключение ограничения для меня, когда он пытался вставить его в способ.
Я использую Spring Security 2.0.8 и IceFaces 1.8 (которая не поддерживает Spring 3.0, но определенно поддерживает 2.0.x, особенно когда я продолжаю набирать SpringSecurityUtils.assureThreadLocalAuthSet())
. Мой AppServer - Tomcat 6.0, а мой DB Server - MySQL 6.0
Я хочу получить ответ в ближайшее время, потому что мне нужно убрать эту задачу с дороги