Я использую Spring Security для защиты и оценки выражения в аннотациях @PostAuthorize и @PreAuthorize для авторизации методов службы. У меня есть требование, которое нужно проверить, имеет ли возвращаемый объект тот же идентификатор пользователя, который вошел в систему и вызывает этот метод.
// this allows the ids of other users too
@PostAuthorize("returnObject!=null?returnObject.userId==principal.account.acid:true")
public AudioClip findAudioClip(int clipId) {
.....
AudioClip clip = dao.findById(clipId);
// may also be null
return clip;
}
Аудиоклип.java
@Component
public class AudioClip implements java.io.Serializable {
private java.math.BigDecimal id;
private java.lang.Integer userId;
.....
}
Извлеченный объект из базы данных содержит идентификатор пользователя, который создал этот объект базы данных. Таким образом, только он имеет право доступа к этому компоненту. Как сравнить returnObject.userId с идентификатором пользователя, вошедшего в систему?
@PreAuthorize("denyAll")
и если он правильно блокирует@PreAuthorize("hasRole('ROLE_CAESAR_IMPERATOR')")
(при условии, что у вас нет такой роли) и сказать, что произойдет? - person Serge Ballesta   schedule 20.08.2014