Bảo vệ ứng dụng JavaFX
Cả ứng dụng Java thông thường lẫn ứng dụng máy tính để bàn Spring Boot đều bật được JavaFX. Môi trường chạy gọn nhẹ của P4JX mặc định không kèm JavaFX: bạn phải bật nó một cách rõ ràng, hoặc để lượt quét tương thích tự bật.
1. Thao tác trên giao diện đồ họa
-
Với ứng dụng JavaFX thông thường, chọn Ứng dụng Java ở trang loại ứng dụng. Với ứng dụng để bàn JavaFX dựng trên vùng chứa Spring, chọn Spring Boot. Mã hóa thư viện chỉ tạo kho lưu trữ đã bảo vệ và không thay thế được việc đóng gói một ứng dụng JavaFX thực thụ.

-
Chọn tệp JAR đầu vào, phiên bản Java đi kèm và các nền tảng mục tiêu, rồi chọn chế độ đơn giản hoặc nâng cao. Thành phần JavaFX được tải riêng cho từng phiên bản Java và từng nền tảng, nên tác vụ nhiều nền tảng sẽ tạo ra các gói đầu ra độc lập.

-
Ở chế độ đơn giản, nếu lượt quét tương thích thấy tham chiếu
javafx.*hoặc phụ thuộc JavaFX, nó sẽ tự bật JavaFX và giải thích lý do trong kết quả quét. Nếu thấy cảjavafx.scene.web, WebView cũng được đưa vào. Quét chỉ là phân tích tĩnh theo phỏng đoán, nên khi sang trang đầu ra hãy xem lại phần tóm tắt JavaFX. -
Ở chế độ nâng cao, trong thẻ Môi trường chạy JavaFX, đánh dấu Đưa JavaFX vào runtime đóng gói rồi chọn cách xử lý WebView:
- Tự động (phát hiện javafx.scene.web): quyết định dựa trên việc ứng dụng có tham chiếu
javafx.scene.webhay không; - Bao gồm: luôn đưa WebView (
fx-webkit) vào; - Loại trừ: không bao giờ đưa vào.
Với ứng dụng Java thông thường, thẻ này có dạng như sau:

Ứng dụng để bàn Spring Boot dùng thẻ cùng tên:

- Tự động (phát hiện javafx.scene.web): quyết định dựa trên việc ứng dụng có tham chiếu
-
Sau khi chọn thư mục xuất, hãy xác nhận phần tóm tắt ghi JavaFX là đã tích hợp và trạng thái WebView đúng như mong đợi, rồi bấm Chạy bảo vệ. Khi gói đã tạo xong, dùng tập lệnh khởi chạy trong gói để kiểm tra cửa sổ, FXML, tài nguyên CSS và hình ảnh, cùng WebView trên từng nền tảng mục tiêu.
Thành phần WebView chiếm khoảng 40 MB. Nếu không dùng tới, hãy chọn Loại trừ để gói nhẹ hơn. Các thiết lập còn lại ở trang nâng cao được mô tả trong Thiết lập chế độ nâng cao của Protector4J.
2. Tải thành phần bằng dòng lệnh
p4j javaapp fx-app.jar dist --javafx
Với Spring Boot kèm JavaFX:
p4j springboot fx-boot.jar dist --javafx
Buộc đưa vào hoặc loại bỏ WebView:
--javafx-webview
--no-javafx-webview
Công cụ tải thành phần phù hợp từ trang tải công khai của khu vực bạn, dựa theo nhánh JDK và nền tảng mục tiêu. Cả việc tải JavaFX lẫn tải VLX JRE đều không đòi hỏi giao khóa lưu trữ đám mây cho máy khách.
3. Thành phần dùng ngoại tuyến
Dòng lệnh chấp nhận một thư mục cục bộ:
p4j javaapp fx-app.jar dist --javafx /opt/p4jx-fx
Thư mục đó có thể ở một trong hai dạng:
fx-core.tar.gzcùngfx-webkit.tar.gzkhông bắt buộc;- một cây tệp JavaFX đã giải nén sẵn, lấy
lib/làm gốc.
Giao diện đồ họa không có mục chọn thư mục JavaFX cục bộ, nên khi ngoại tuyến hãy dùng dòng lệnh.
4. FXML
Nếu ứng dụng dùng FXMLLoader, lượt quét tương thích sẽ khuyên bật lớp phủ ZIP cho trình quét:
p4j javaapp fx-app.jar dist --javafx --zip-overlay scanner
Tài nguyên FXML, chữ ký của controller và việc quét framework đều phải kiểm chứng bằng cách khởi chạy thật ứng dụng trên nền tảng mục tiêu.
5. Java 8 so với Java 11 trở lên
- Java 8 dùng
jfxrt.jarvà mô hình thư mục mở rộng, nên tập lệnh sinh ra thường không cần tùy chọn mô-đun. - Java 11 trở lên dùng các JAR JavaFX theo mô-đun, và tập lệnh sinh ra sẽ tự đặt đường dẫn mô-đun riêng kèm
--add-modules.
Hãy luôn khởi chạy qua run.sh, run.command hoặc run.bat đã sinh. Đừng tự trỏ đường dẫn mô-đun vào toàn bộ vlxjre/lib.
6. Cách bộ phát hiện tự động quyết định
Bộ phát hiện xem xét các tham chiếu lớp trong mã của chính bạn và tên tệp của các JAR phụ thuộc. Nó cố ý không soi bytecode của mọi phụ thuộc bên thứ ba: làm vậy sẽ khiến những phần tích hợp JavaFX chỉ mang tính tùy chọn bị coi là đang thật sự được dùng.
Nếu JavaFX bị nhúng bằng shading vào một phụ thuộc mà tên gọi không hé lộ điều đó, bộ phát hiện tự động có thể bỏ sót. Khi ấy hãy chỉ định rõ --javafx.
7. Phạm vi bảo vệ được khuyến nghị
- Có nên bảo vệ các lớp con của
Applicationtrong JavaFX, controller FXML và mô hình thuộc tính hay không còn tùy vào cách chúng hoạt động khi kiểm thử trên phiên bản Java mục tiêu của bạn. - Các lớp cầu nối bị JNI hoặc mã gốc truy cập trực tiếp nên để không bảo vệ.
- Hãy bắt đầu bằng chế độ đơn giản hoặc
--compat-scan, sau đó kiểm thử hồi quy việc mở cửa sổ, nạp FXML, tài nguyên CSS và hình ảnh, WebView cùng các thư viện gốc của nền tảng.