webstart应用程序日志记录权限被拒绝

时间:2011-08-12 23:17:59

标签: java logging java-web-start

是否可以使用java.util.Logging并登录到java webstart应用程序中的文件? 我有以下日志记录代码:


 Handler fh = new FileHandler("myapp.log");
 Logger.getLogger(MyApp.class.getName()).addHandler(fh);

并得到以下例外:


java.security.AccessControlException: access denied (java.util.logging.LoggingPermission control)
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.util.logging.LogManager.checkAccess(Unknown Source)
    at java.util.logging.Handler.checkAccess(Unknown Source)
    at java.util.logging.FileHandler.(Unknown Source)
    at whoisapiclient.WhoisAPIClientApp.main(WhoisAPIClientApp.java:80)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.sun.javaws.Launcher.executeApplication(Unknown Source)
    at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
    at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
    at com.sun.javaws.Launcher.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

2 个答案:

答案 0 :(得分:6)

访问控制异常说明了这一点:

  

“访问被拒绝(java.util.logging.LoggingPermission control)”

权限类的javadoc说明了这一点:

  

“目前只有一个名为LoggingPermission。这是”控制“,它授予控制日志配置的能力,例如通过添加或删除处理程序,添加或删除过滤器,或更改日志记录级别

您所做的事情显然属于“控制”许可范围。

如果要创建/添加自己的日志处理程序,则需要对应用程序进行签名。


顺便说一句,如果您确实设法解决LoggingPermission("control"),那么在打开日志文件时会遇到另一个访问问题。

通过签署应用程序解决了这两个问题。然后,您就遇到了用户必须接受/信任您的签名密钥的问题。但这很公平!就Java安全沙箱而言,您正在做的事情可能会损坏用户的计算机。

答案 1 :(得分:0)

您是否尝试过指定绝对路径?也许问题是您无法访问应用程序本身的当前工作目录。