Вы можете справиться с ACL, как предложил Томаш Нуркевич. Но ACL Spring Securitz сложны и плохо документированы. (Лучший ресурс, который я знаю, это книга: Spring Security 3 - авторы Spring Security)
Но если вам действительно нужен только этот простой if (currentUser.id == photo.uploader.id)
тест, то я бы порекомендовал другой метод.
Можно улучшить выражения безопасности метода, используя их в аннотациях @PreAuthorize. Как:
@PreAuthorize("isPhotoOwner(#photo)")
public void doSomething(final Photo photo) {
Для реализации такого выражения isPhotoOwner
ядро действительно простое:
public class ExtendedMethodSecurityExpressionRoot extends MethodSecurityExpressionRoot {
public ExtendedMethodSecurityExpressionRoot(final Authentication a) {
super(a);
}
/**
*
*/
public boolean isPhotoOwner(final Photo photoObject) {
if (photoObject == null) {
return false;
}
Photo photo = (photo) photoObject;
return photo.getCreator().getLogin().equals(authentication.getName());
}
}
К сожалению, для регистрации ExtendedMethodSecurityExpressionRoot требуется дополнительная работа. --- У меня сейчас нет времени, если вы готовы попробовать этот подход, оставьте комментарий, а я опишу остальное