Trong khi kiểm tra thành viên vai trò có phần chống mẫu (tốt hơn là viết mã cho quyền hoặc hoạt động), chúng thường được sử dụng để kiểm soát truy cập cấp dịch vụ (yêu cầu web & yêu cầu phương thức), nhưng không hoàn toàn phù hợp với để bảo vệ đối tượng miền thực trong cài đặt nhiều đối tượng thuê, ví dụ: để ngăn người dùng truy cập tài nguyên của người dùng khác có cùng vai trò.
Cách tiếp cận kiểm tra xem thông tin đăng nhập được xác thực có được liên kết với một đối tượng miền cụ thể không, nhưng các cặp vợ chồng và/hoặc làm ô nhiễm mô hình dữ liệu ứng dụng của bạn với mô hình dữ liệu bảo mật. thực hành.
Bạn đã xác định một số tùy chọn:
Apache Shiro cung cấp một API nhất quán và dễ sử dụng hỗ trợ điều khiển truy cập đối tượng miền, nhưng bạn có trách nhiệm cung cấp các phụ trợ "vương quốc", có nghĩa là bạn có thể phải triển khai kho dữ liệu và/hoặc DAO của riêng bạn.
ACL an toàn mùa xuân là mô hình kiểm soát truy cập của Spring để bảo mật đối tượng miền. Nó tách riêng mô hình dữ liệu bảo mật khỏi mô hình dữ liệu ứng dụng của bạn. Danh sách kiểm soát truy cập giúp dễ dàng cấp hoặc kiểm tra quyền truy cập vào các đối tượng miền bằng cách thêm hoặc tra cứu các mục ACL, nhưng bạn có thể cần phải viết DAO của riêng mình nếu bạn muốn tìm kiếm hiệu quả tất cả các đối tượng miền mà người dùng có quyền truy cập (ví dụ: các đối tượng trong danh sách hoặc thu hồi quyền truy cập vào chúng). Hơn nữa, bạn có trách nhiệm duy trì ACL vì:
Xuân An không cung cấp bất kỳ hội nhập đặc biệt để tự động tạo, cập nhật hoặc xóa ACL như một phần của DAO của bạn hoặc hoạt động kho. Thay vào đó, bạn sẽ cần phải viết mã [...] cho các đối tượng miền riêng của bạn. Bạn nên cân nhắc sử dụng AOP trên lớp dịch vụ của mình để tự động tích hợp thông tin ACL với các hoạt động của lớp dịch vụ của bạn.
— Spring Security 4.0 reference
Cuối cùng, bạn sẽ phải tùy chỉnh việc thực hiện ACL nếu API mặc định là không tương thích với mô hình ứng dụng của bạn (ví dụ: nếu đối tượng tên miền của bạn không có một công getId()
hoặc không sử dụng ID tương thích với long
)
Nếu bạn chưa kết hôn với Spring hoặc Shiro để cung cấp điều khiển truy cập đối tượng miền, có một lựa chọn khác:
OACC, một mã nguồn mở Java khuôn khổ an ninh (tiết lộ: Tôi duy trì và đồng tác giả), mà cung cấp một API giàu cho cả thực thi và quản lý nhu cầu uỷ quyền của bạn. OACC là một khung kiểm soát truy cập hoàn chỉnh với một API phong phú mà không yêu cầu bất kỳ việc triển khai DIY nào để cho phép mô hình hóa có lập trình và năng động của ủy quyền chi tiết. Nó có tính năng lưu trữ dữ liệu được hỗ trợ đầy đủ RDBMS cho mô hình bảo mật của nó, mà API quản lý cho bạn đằng sau hậu trường.
Mô hình bảo mật của OACC dựa trên quyền: về cơ bản nó quản lý các quyền giữa các tài nguyên .Tài nguyên đại diện cho cả hai đối tượng miền được bảo mật và các tác nhân trên chúng (tức là đối tượng). Nó cũng cung cấp các phương thức truy vấn hiệu quả để tìm tài nguyên theo sự cho phép, mà không tải tất cả các tài nguyên trước và sau đó lọc ra các tài nguyên trái phép. Các phương pháp này là đối xứng theo nghĩa là bạn có thể tìm thấy cả hai tài nguyên mà tài nguyên được chỉ định có một nhóm quyền cụ thể và tài nguyên có tập hợp quyền cụ thể đối với tài nguyên được chỉ định
So sánh đoạn OACC để cấp phép dưới đây với các sample code from the Spring Security ACL reference:
// get the resource representing the principal that we want to grant permissions to
User accessorUser = Users.findByName("Samantha");
Resource accessorResource = Resources.getInstance(accessorUser.getId());
// get the resource representing the object that we want to grant permissions to
Resource accessedResource = Resources.getInstance(Foos.findById(44).getId());
// Now grant some permissions
Permission permission = ResourcePermissions.getInstance("ADMINISTER");
oacc.grantResourcePermissions(accessorResource,
accessedResource,
permission);
để kiểm tra cho phép, bạn có thể gọi
oacc.assertResourcePermissions(accessorResource, accessedResource, permission);
hoặc kiểm tra giá trị trở lại của
oacc.hasResourcePermissions(accessorResource, accessedResource, permission);
Một tính năng mới của OACC là tạo-quyền, mà không chỉ kiểm soát những gì loại tài nguyên một chủ đề có thể tạo ra, mà còn xác định quyền chính xác những gì họ sẽ nhận được trên một tài nguyên mới sau khi tạo nó - được xác định một lần, quyền được tự động gán cho người tạo tài nguyên, mà không cần các cuộc gọi API rõ ràng.
Tóm lại, OACC được phát triển cụ thể với trường hợp sử dụng của bạn là xác thực, ủy quyền chi tiết, được ghi nhận.
Chỉ muốn cảm ơn bạn đã trả lời. Tôi đã không có một cái nhìn kỹ lưỡng về oacc chưa ~ Tôi đã nhận được một chút bị mắc kẹt trên hướng dẫn khởi động ... – Hurricane
Cảm thấy tự do để gửi một câu hỏi ở đây hoặc trên [danh sách gửi thư của OACC] (https://groups.google.com/ diễn đàn/#! forum/oacc-users), nếu bạn cần bất kỳ trợ giúp hoặc làm rõ – fspinnenhirn