@PreFilter
và @PostFilter
được chỉ định để sử dụng với bảo mật mùa xuân để có thể lọc bộ sưu tập hoặc mảng dựa trên ủy quyền.
Để có làm việc này, bạn cần phải sử dụng kiểm soát truy cập biểu hiện dựa trên an ninh mùa xuân (như bạn có trong ví dụ của bạn)
@PreFilter - lọc bộ sưu tập hoặc mảng trước khi phương pháp thực hiện.
@PostFilter - lọc bộ sưu tập hoặc mảng được trả lại sau khi thực hiện phương pháp.
Vì vậy, giả sử bạn getUser()
trả về Danh sách người dùng. Spring Security sẽ lặp qua danh sách và xóa bất kỳ phần tử nào mà biểu thức được áp dụng là sai (ví dụ: không phải là quản trị viên và không có quyền đọc)
filterObject là đối tượng tích hợp để thực hiện bộ lọc và bạn có thể áp dụng các điều kiện khác nhau để đối tượng này (về cơ bản tất cả các biểu thức built-in có sẵn ở đây, ví dụ như principal
, authentication
), ví dụ bạn có thể làm
@PostFilter ("filterObject.owner == authentication.name")
Mặc dù những bộ lọc này rất hữu ích, nó thực sự không hiệu quả với các tập dữ liệu lớn, và về cơ bản bạn mất quyền kiểm soát kết quả của mình, thay vào đó, Spring kiểm soát kết quả.