java正在从HostServices捕获SecurityException。展示文件
我有一个实例化了安全控制器的应用程序。我让那部分工作。调用HostServices时,我正在测试一个安全异常。showDocument()和我可以在日志中看到“拒绝访问”消息。我还在日志中看到异常:
access: access denied ("java.io.FilePermission" "<<ALL FILES>>" "execute")
java.lang.Exception: Stack trace
at java.base/java.lang.Thread.dumpStack(Thread.java:1388)
at java.base/java.security.AccessControlContext.checkPermission(AccessControlContext.java:462)
at java.base/java.security.AccessController.checkPermission(AccessController.java:897)
at java.base/java.lang.SecurityManager.checkPermission(SecurityManager.java:322)
at java.base/java.lang.SecurityManager.checkExec(SecurityManager.java:572)
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1096)
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)
at java.base/java.lang.Runtime.exec(Runtime.java:592)
at java.base/java.lang.Runtime.exec(Runtime.java:451)
at com.sun.javafx.application.HostServicesDelegate$StandaloneHostService.showDocument(HostServicesDelegate.java:146)
at javafx.application.HostServices.showDocument(HostServices.java:115)
... snip ...
但是,应用程序中没有例外。代码调用showDocument()方法并跳过catch块,就好像没有发生异常一样。因此,我查看了openjfx的代码,在HostServicesDeletgate.java中有一个小贴士
@Override
public void showDocument(final String uri) {
String osName = System.getProperty("os.name");
try {
if (osName.startsWith("Mac OS")) {
Desktop.getDesktop().browse(URI.create(uri));
} else if (osName.startsWith("Windows")) {
Runtime.getRuntime().exec(
"rundll32 url.dll,FileProtocolHandler " + uri);
} else { //assume Unix or Linux
String browser = null;
for (String b : browsers) {
if (browser == null && Runtime.getRuntime().exec(
new String[]{"which", b}).getInputStream().read() != -1) {
Runtime.getRuntime().exec(new String[]{browser = b, uri});
}
}
if (browser == null) {
throw new Exception("No web browser found");
}
}
} catch (Exception e) {
// should not happen
// dump stack for debug purpose
e.printStackTrace();
}
}
因此,他们使用showDocument()方法中的异常(我个人认为这是一种糟糕的形式,但可能是有原因的)
想到的一个解决方案是在调用showDocument()方法之前检查权限。有更好的解决办法吗
共 (0) 个答案