2009-03-06 38 views
5

Tôi đã tập hợp một applet cơ bản nơi người dùng chọn một tập tin từ ổ đĩa cứng của họ, nó đọc dòng đầu tiên của tập tin này và chuyển nó tới JavaScript để thêm tiền xử lý, và sau đó khi bạn nhấp vào nút nó cố tải lên tệp đó thông qua yêu cầu HTTP POST. Tôi đã tìm thấy một applet mã nguồn mở rất cơ bản để tải lên các tệp mà tôi đã sao chép và sửa đổi cho bit cuối cùng này.Java Applet Permissions

Sự cố là, tuy nhiên, nó không hoạt động. Nó có vẻ như nó đang chạy tốt, nhưng sau đó tôi chạy vào hai snags liên quan đến quyền truy cập. Các thông điệp trong Console Java nói rằng applet có access denied lỗi trên hai điều khoản sau đây:

java.lang.RuntimePermission setFactory 
java.io.FilePermission read 

Tôi tìm thấy điều này lạ, bởi vì tôi nghĩ rằng tôi đã cấp phép applet đã khi tôi xây dựng nó với " tự ký "tùy chọn kiểm tra trong NetBeans, và sau đó nhấp để xác nhận cửa sổ pop-up bảo mật nhỏ trong trình duyệt.

Ngoài ra, phần mà tôi đã mã hóa bản thân mình, nơi nó đọc tệp và chuyển dòng đầu tiên lên JavaScript hoạt động tốt. Đây là một chỉ báo khá rõ ràng rằng applet có thể đọc từ hệ thống tập tin cục bộ! Sự cố không bắt đầu cho đến khi tôi thực sự cố bắt đầu tải lên. Một điều cần lưu ý, tôi giả sử, là quá trình tải lên dường như chạy trong một chuỗi mới, trong khi phần còn lại của tất cả chạy trong lớp chính mà không tạo chủ đề.

Tôi là một người mới làm quen với Java và biết rất ít về các chủ đề trong Java; Tôi có cần phải chuyển quyền truy cập vào chủ đề mới này không? Hoặc một thứ gì đó hiệu quả? Cảm ơn trước.

Trả lời

3

Bạn có thể cần yêu cầu người quản lý bảo mật (mã, không phải quản trị viên) cho phép thực hiện thao tác đặc quyền. Vì nhiều lý do, thường không phải là một điều tốt để một applet có thể mở một tệp cục bộ, vì vậy nó được bảo vệ khá nhiều.

Khóa cơ bản là gọi AccessController.doPrivileged() và có good little tutorial trên đó tại Câu hỏi thường gặp về Java Ranch.

+0

doPrivileged cực kỳ nguy hiểm. Như đang ký applet. –

+3

Như cho phép các applet đọc các tập tin. Không ít, nó ở đó và câu trả lời cho câu hỏi. –

0

Có thể do JavaScript chưa được ký. Tôi khuyên bạn không nên ký mã, đặc biệt nếu bạn không biết mình đang làm gì. Từ 6u10 (không phải trên Mac chưa) applet có thể sử dụng JNLP bao gồm cả FileOpenService, vì vậy bạn không cần phải ký tên.

+0

không phải là JavaScript; Java. – Ricket

+0

Câu hỏi cho biết có JavaScript liên quan. Dự đoán được giáo dục của tôi là JavaScript của nó trong ngữ cảnh kiểm soát truy cập gây ra sự cố. –

1

Tôi đã gặp phải sự cố tương tự mất nhiều thời gian để giải quyết. Hóa ra các phương thức applet được gọi từ JavaScript không có quyền, ngay cả khi bạn cấp chúng một cách rõ ràng trong một tệp chính sách.

workaround này đã làm việc cho tôi (thêm lệnh để một hàng đợi mà applet vòng qua): http://blog.carrythezero.com/?p=5

Hãy chắc chắn rằng bạn hiểu những nguy hiểm ở đây: Bất cứ ai cũng có thể sửa đổi Javascript trên một trang và thay đổi những gì đang bị đưa vào applet. Trong trường hợp của tôi, tôi biết mã không bao giờ xảy ra trên máy chủ web và lớp không được ký sao cho nó sẽ không thành công trừ khi ở vị trí cụ thể do tệp chính sách của tôi cấp.

Các vấn đề liên quan