[英]Starting jstatd in Java 9+
過去,我通過安全策略文件啟動了 jstatd,如下所示: https : //stackoverflow.com/a/14930180/1294116
但是,在 Java 9+ 中,他們刪除了tools.jar
文件,這意味着該解決方案不再有效。 有誰知道如何解決這個問題? (目前我又回到了錯誤java.security.AccessControlException: access denied ("java.util.PropertyPermission" "java.rmi.server.ignoreSubClasses" "write") ...
)
以下策略文件應該適合您(至少在 Java 11 下):
grant codebase "jrt:/jdk.jstatd" {
permission java.security.AllPermission;
};
grant codebase "jrt:/jdk.internal.jvmstat" {
permission java.security.AllPermission;
};
感謝Sebastian S指出jdk.internal.jvmstat
也需要被授予適當的權限並確認上述工作。 后者也感謝Gili 。
如下所示, tools.jar
文件被刪除,其中的所有內容都被拆分為模塊。 jstatd
工具現在位於jdk.jstatd
模塊中。 我找不到有關如何確定哪個工具進入哪個模塊的文檔,盡管Javadoc會事后告訴您。 請注意,某些模塊包含單個工具的代碼,而其他模塊包含多個工具的代碼。
從策略文件語法文檔:
如果您使用的是模塊化運行時映像(請參閱
jlink
工具),您可以通過將jrt
URL 指定為策略文件中的codeBase
值來授予對映像中的應用程序和庫模塊的權限。 有關jrt
URL 的更多信息,請參閱JEP 220:模塊化運行時圖像。以下示例授予模塊
com.greetings
讀取foo
屬性的com.greetings
:grant codeBase "jrt:/com.greetings" { permission java.util.PropertyPermission "foo", "read"; };
來自JEP 200:模塊化 JDK :
設計原則
JDK 的模塊化結構實現了以下原則:
- 標准模塊的規范由 JCP 管理,其名稱以字符串
"java."
開頭"java."
.- 所有其他模塊只是 JDK 的一部分,名稱以字符串
"jdk."
開頭"jdk."
.[...]
概括
重構 JDK 和 JRE 運行時映像以適應模塊並提高性能、安全性和可維護性。 定義一個新的 URI 方案,用於命名存儲在運行時映像中的模塊、類和資源,而無需透露映像的內部結構或格式。 根據需要修改現有規范以適應這些變化。
[...]
刪除:rt.jar 和 tools.jar
以前存儲在
lib/rt.jar
、lib/tools.jar
、lib/dt.jar
和各種其他內部 JAR 文件中的類和資源文件現在以更高效的格式存儲在lib
目錄中的特定於實現的文件中。 這些文件的格式未指定,如有更改,恕不另行通知。刪除
rt.jar
和類似文件會導致三個不同的問題:
[...]
java.security.CodeSource
API 和安全策略文件使用 URL 來命名要被授予指定權限的代碼庫的位置。 需要特定權限的運行時系統組件當前通過文件 URL 在lib/security/java.policy
文件中標識。 橢圓曲線密碼提供者,例如,被標識為file:${java.home}/lib/ext/sunec.jar
顯然,這在模塊化圖像中沒有意義。
[...]
用於命名存儲模塊、類和資源的新 URI 方案
為了解決上述三個問題,可以使用新的 URL 方案
jrt
來命名存儲在運行時映像中的模塊、類和資源,而無需透露映像的內部結構或格式。
jrt
URL 是一個分層 URI,符合 RFC 3986,語法為jrt:/[$MODULE[/$PATH]]
其中
$MODULE
是可選的模塊名稱,$PATH
(如果存在)是該模塊中特定類或資源文件的路徑。jrt
URL 的含義取決於其結構:
[...]
jrt:/$MODULE
是指所有的模塊類和資源文件的$MODULE
。[...]
這三種形式的
jrt
URL分別解決了上述問題:
[...]
安全策略文件和
CodeSource
API 的其他用途可以使用jrt
URL 來命名特定模塊以授予權限。 橢圓曲線加密提供者,例如,現在可以通過jrt
URL 識別jrt:/jdk.crypto.ec
當前被授予所有權限但實際上並不需要它們的其他模塊可以簡單地取消特權,即,精確地給予它們需要的權限。
[...]
JEP 200和JEP 220都是Jigsaw 項目的一部分。
我找到了一個(有問題的)解決方案:
grant {
permission java.security.AllPermission;
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.