Tôi đang phát triển một hệ thống cho phép các nhà phát triển tải lên các tập lệnh dạng lệnh và trình tạo nhãn hiệu tùy chỉnh.Mã Java/Groovy/Freemarker Sandboxing - Ngăn chặn việc thực thi các phương thức cụ thể
Tôi có thể cung cấp mức bảo mật ở mức rất cao với cơ sở hạ tầng bảo mật Java mặc định - tức là ngăn chặn mã truy cập hệ thống tệp hoặc mạng, tuy nhiên tôi cần hạn chế quyền truy cập vào các phương pháp cụ thể.
Kế hoạch của tôi là sửa đổi các runtimes của Groovy và Freemarker để đọc các chú thích có thể đưa vào danh sách trắng hoặc danh sách đen, tuy nhiên điều này sẽ buộc tôi phải duy trì phiên bản mã của họ.
Tất cả những gì tôi cần làm là ngăn chặn việc thực hiện các phương thức cụ thể khi được gọi từ Groovy hoặc Freemarker. Tôi đã xem xét một hack mà sẽ nhìn vào ngăn xếp cuộc gọi, nhưng điều này sẽ là một hit tốc độ lớn (và nó khá lộn xộn).
Có ai có ý tưởng nào khác để thực hiện việc này không?
Trong nhiều trường hợp (hầu hết) lớp, phương thức này sẽ không được biết tại thời gian biên dịch, vì vậy việc phân tích dữ liệu AST sẽ không thực sự hiệu quả. Tuy nhiên, đây là câu trả lời hay nhất ở đây vì vậy tôi sẽ đánh dấu câu trả lời này. Tôi đã kết thúc tìm một giải pháp tốt bằng cách sử dụng Metaclasses. –