Chúng tôi có một cửa hàng ba được phát triển cục bộ dựa trên các cây b mà tôi muốn sử dụng để lưu trữ liên tục trong một số ứng dụng servlet. Thay vì nhúng các tệp chỉ mục b-tree trong servlet .war, tôi muốn lưu trữ chúng tại một vị trí đã biết và có các servlet truy cập trực tiếp chúng. Tất cả điều này hoạt động trong Jetty, nhưng làm tăng một ngoại lệ bảo mật khi tôi thử nó trong Tomcat. Tôi nói rằng mô hình bảo mật của Tomcat yêu cầu quyền rõ ràng đối với một servlet để truy cập các tệp bên ngoài cây thư mục nơi .war được giải nén. Nếu tôi đã hiểu Tomcat (phiên bản 5.5) tài liệu một cách chính xác, sau đây được bổ sung vào catalina.policy
nên cho phép servlet để truy cập thư mục chứa các tập tin chỉ số là:Cài đặt catalina.policy để cho phép truy cập tập tin bởi servlets
grant codeBase "jar:file:${catalina.home}/webapps/mytestapp/-"
{
permission java.io.FilePermission "/var/data/tdb/-", "read, write, delete";
}
Tuy nhiên, tôi vẫn nhận được một ngoại lệ an ninh:
java.io.FileNotFoundException:
/var/data/tdb/kb/node2id.idn (Permission denied)
at java.io.RandomAccessFile.open(Native Method)
...
Để đánh dấu các lỗi câm rõ ràng: Tôi đã kiểm tra xem tệp chỉ mục có đúng vị trí, với quyền chính xác và không bị hỏng hay không. Bất kỳ gợi ý hay gợi ý nào về những gì tôi đã sai trong các thiết lập bảo mật sẽ được nhận biết ơn.
Bạn có thể đăng cách bạn mở tệp/mã bạn đang sử dụng để làm như vậy không? –
Bạn đang chạy selinux? Nếu vậy, bạn có thể cần phải cấu hình selinux để nó cho phép truy cập vào thư mục đó bằng Java. – Eddie