Bạn có thể xử lý nó bằng ACL như Tomasz Nurkiewicz đã đề xuất. Nhưng Spring Securitz ACLs phức tạp và kém tài liệu. (Tài nguyên tốt nhất tôi biết cho nó là Cuốn sách này: Spring Security 3 - bởi các tác giả của Spring Security)
Nhưng nếu bạn thực sự chỉ cần thử nghiệm đơn giản if (currentUser.id == photo.uploader.id)
, thì tôi sẽ giới thiệu một kỹ thuật khác.
Có thể tăng cường các biểu thức bảo mật của phương thức mà bạn có thể sử dụng chúng trong chú thích @PreAuthorize. Giống như:
@PreAuthorize("isPhotoOwner(#photo)")
public void doSomething(final Photo photo) {
Thực hiện như một biểu isPhotoOwner
cốt lõi là thực sự đơn giản:
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());
}
}
Unfortunaly có một số công việc addtional để đăng ký ExtendedMethodSecurityExpressionRoot. --- Tôi không có thời gian vào lúc này, nếu bạn sẵn sàng thử phương pháp này, sau đó để lại cam kết và tôi sẽ mô tả phần còn lại
Vâng, nó đã cũ vào năm 2012 vì vậy bây giờ vào năm 2017 tôi đoán nó là "siêu cũ". Có điều gì mới đối với ACL trong mùa xuân? Vẫn còn khó để bắt đầu với điều đó - hoặc là đã có một sự thay thế? – displayname