2012-09-05 9 views
6
permission java.net.SocketPermission "192.168.1.1:31337", "connect, accept, resolve"; 

Quyền sau đây cho phép là gì? Ứng dụng của tôi có được phép chấp nhận các kết nối chỉ từ 192.168.1.1:31337 (có thể là máy khách bên ngoài) hoặc chấp nhận các kết nối đến 192.168.1.1:31337 (ứng dụng của tôi đang chạy trên 192.168.1.1:31337, sự khác biệt ở đâu để 'nghe '?).Làm thế nào để hiểu java Socket-Quyền?

Trả lời

3

Nếu mã của bạn là một applet hoặc chạy dưới trình quản lý bảo mật java, bạn cần cấp quyền rõ ràng để thực hiện công cụ.

Để quyền truy cập tài nguyên được phép cho applet (hoặc ứng dụng đang chạy với trình quản lý bảo mật), quyền tương ứng phải được cấp rõ ràng cho mã đang cố gắng truy cập.

Theo mặc định, mã của bạn không có quyền socket. Quyền của bạn cho biết rằng mã của bạn có quyền chấp nhận kết nối, để kết nối và giải quyết chỉ máy chủ với IP 192.168.1.1 trên cổng 31337.

Hành động "chấp nhận" và "kết nối" là hiển nhiên.

Hành động "giải quyết" được ngụ ý khi bất kỳ hành động nào khác là hiện tại. Hành động "giải quyết" đề cập đến tra cứu dịch vụ lưu trữ tên máy chủ/ip.

Hành động "nghe" chỉ có ý nghĩa khi được sử dụng với "localhost".

Sự khác biệt giữa nghe và chấp nhận là nghe có nghĩa là "được chuẩn bị để kết nối và xem liệu có kết nối đang chờ" và chấp nhận có nghĩa là "ok, chấp nhận".

See the docs for permissions in java 7.java.net.SocketPermission java docs

+0

Vâng, các tài liệu hướng mặt trời nói: Tương tự, nếu các quyền sau: p2 = SocketPermission mới ("localhost: 1024-", "chấp nhận, kết nối, nghe"); được cấp cho một số mã, nó cho phép mã đó chấp nhận các kết nối, kết nối hoặc nghe trên bất kỳ cổng nào trong khoảng từ 1024 đến 65535 trên máy chủ cục bộ. Vì vậy, "chấp nhận" cho phép kết nối đến máy chủ cụ thể, không phải từ máy chủ cụ thể. – lazydaemon

+0

Tất nhiên là "bật", không phải "từ". Phần còn lại của câu trả lời cho thấy điều này. Đã sửa. Cảm ơn. – dcernahoschi