2012-01-11 38 views
6

Tôi đang viết một ứng dụng webstart java để triển khai từ trang web để người dùng có thể nhấp và chạy phần mềm của tôi. Tôi cần phải có một loại máy nhận dạng duy nhất để tránh lạm dụng việc truy cập các tập tin. Tôi muốn sử dụng địa chỉ MAC của máy khách như một khóa duy nhất để máy chủ có thể đảm bảo rằng không có khách hàng nào tải xuống quá nhiều.Cách ứng dụng Java WebStart Lấy địa chỉ MAC để truy cập trang web của tôi

Tất nhiên, người dùng có thể có nhiều thẻ mạng, vậy làm cách nào để ứng dụng Java của tôi xác định địa chỉ MAC của thẻ mạng mà người dùng đang sử dụng để truy cập trang web của tôi?

+4

gì xảy ra khi người dùng thay đổi địa chỉ MAC của họ thường xuyên để phá vỡ hạn chế này? –

Trả lời

6

Bạn có thể sử dụng java.net.NetworkInterface.getNetworkInterfaces để lấy các giao diện mạng và gọi getHardwareAddress() trên chúng để nhận địa chỉ MAC.

Bạn có thể lọc ra vòng lặp với if.isLoopBack() (trong đó "if" là đối tượng giao diện). Ngoài ra, lọc ra bất kỳ giao diện nào mà if.getHardwareAddress() trả về null. Sau đó chọn ra một. Bạn có thể sắp xếp chúng theo tên, if.getName() và lấy tên đầu tiên. Đối với mục đích của bạn, nó không thực sự quan trọng nếu nó là giao diện thực tế được sử dụng để tải xuống các tệp của bạn hay không, chỉ cần bạn có thể xác định máy tính bằng cách nào đó. Cuối cùng if.getHardwareAddress() cung cấp cho bạn một mảng các byte với địa chỉ MAC. Nếu bạn muốn có một String, hãy định dạng từng byte bằng "% 02x" .format (byte) và nối chúng với dấu ":" làm dấu tách.

Như được đề xuất trong một câu trả lời khác, tốt hơn nên sử dụng PersistenceService.

Sử dụng địa chỉ MAC có thể hữu ích nếu bạn muốn lưu dữ liệu khác nhau cho cùng một người dùng trên các máy tính khác nhau trong trường hợp người dùng có cùng tệp/homedir trên mỗi máy tính. Bạn có thể sử dụng địa chỉ MAC như một phần của URL mà bạn chuyển tới PersistenceService # create() và get(). Hữu ích nếu bạn muốn dữ liệu trên mỗi máy tính thay vì dữ liệu cho mỗi người dùng.

dụ ngắn Scala-code:

7

xác định ..machine ..

Tại sao không thay vì làm một loại 'xác định phiên'? Như mỗi ứng dụng. tải (bạn có thể muốn thực hiện SingleInstanceService để thực thi một ứng dụng. trên mỗi máy tính.) có liên hệ với máy chủ để thiết lập một phiên duy nhất. Sử dụng nó để xác định nó cho mỗi yêu cầu.

Để ngăn chặn người dùng 'sử dụng hết' trợ cấp của họ và dừng/khởi động lại ứng dụng. (trong một giới hạn thời gian), lưu trữ một số chi tiết bằng cách sử dụng PersistenceService.

+0

Đây chắc chắn là một trong những giải pháp. Nếu người dùng nhấp vào trang web bắt đầu từ trang web của tôi, thì tôi có thể phát hành id phiên. Một senario khác là tôi phân phối ứng dụng này cho người dùng để họ có thể nhấp vào tệp jar trên màn hình để chạy nó hoặc nếu trang web không có trang đăng nhập. Sau đó, không có id phiên (tôi có đúng không?). Sử dụng địa chỉ MAC là một cách tôi có thể nghĩ đến để xác định người dùng trong tình huống này. Về cơ bản tôi đang cố gắng tránh cho người dùng quá nhiều rắc rối để đăng nhập mỗi lần. Nhưng tôi muốn tìm hiểu xem liệu có ai đó đang lạm dụng máy chủ web hay không. Cảm ơn. –

+0

Vui lòng [chấp nhận câu trả lời] (http://meta.stackexchange.com/a/5235/155831) nếu nó giúp giải quyết vấn đề. –

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