webstart 应用程序日志记录权限被拒绝
Posted
技术标签:
【中文标题】webstart 应用程序日志记录权限被拒绝【英文标题】:webstart application logging permission denied 【发布时间】:2011-08-12 23:17:59 【问题描述】:是否可以使用 java.util.Logging 并记录到 java webstart 应用程序中的文件? 我有以下日志记录代码:
处理程序 fh = new FileHandler("myapp.log"); Logger.getLogger(MyApp.class.getName()).addHandler(fh);并得到以下异常:
java.security.AccessControlException:访问被拒绝(java.util.logging.LoggingPermission 控制) 在 java.security.AccessControlContext.checkPermission(未知来源) 在 java.security.AccessController.checkPermission(未知来源) 在 java.lang.SecurityManager.checkPermission(未知来源) 在 java.util.logging.LogManager.checkAccess(未知来源) 在 java.util.logging.Handler.checkAccess(未知来源) 在 java.util.logging.FileHandler.(未知来源) 在 whoisapiclient.WhoisAPIClientApp.main(WhoisAPIClientApp.java:80) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) 在 java.lang.reflect.Method.invoke(未知来源) 在 com.sun.javaws.Launcher.executeApplication(未知来源) 在 com.sun.javaws.Launcher.executeMainClass(未知来源) 在 com.sun.javaws.Launcher.doLaunchApp(未知来源) 在 com.sun.javaws.Launcher.run(未知来源) 在 java.lang.Thread.run(未知来源)【问题讨论】:
【参考方案1】:访问控制异常是这样说的:
“拒绝访问(java.util.logging.LoggingPermission 控制)”
权限类的javadoc 表示:
“目前只有一个名为 LoggingPermission。这是“控制”,它授予控制日志配置的能力,例如通过添加或删除处理程序、添加或删除过滤器或更改日志记录级别.”
你正在做的事情显然属于“控制”权限。
如果要创建/添加自己的日志处理程序,您将需要签署您的应用程序。
顺便说一句,如果您确实设法解决了LoggingPermission("control")
,那么您在打开日志文件时会遇到另一个访问问题。
这两个问题都可以通过签署应用程序来解决。然后,您遇到了用户必须接受/信任您的签名密钥的问题。但这已经足够公平了!就 Java 安全沙箱而言,您所做的事情可能会损坏用户的机器。
【讨论】:
在我对所有应用程序 jar 进行签名后,它现在可以工作了!现在我在哪里可以找到应用程序写入工作目录的日志记录和其他文件?工作目录在哪里? 我不知道答案。我什至不确定它是否可以预测。尝试进行文件名搜索。或者查看new File("myapp.log").getAbsolutePath()
在 JWS 平台上运行时为您提供的内容。
我自己签名了我的 jar,但仍然遇到同样的问题。
见***.com/questions/37213521/…【参考方案2】:
您是否尝试过指定绝对路径?也许问题在于您无权访问应用程序本身的当前工作目录。
【讨论】:
是否有指定当前工作目录的可移植方式?什么是 webstart 应用程序的合理工作目录?我应该把日志文件放在哪里? @Shawn D. - 这不是实际问题。 (但如果应用程序到达文件处理程序试图打开文件的地步......)以上是关于webstart 应用程序日志记录权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章