我有三个类,一个叫Capture,AppletLogging和AbstractJLabel。我在%USERPROFILE%/。java.policy文件中设置了以下权限:
grant codeBase "file:/C:/project/abc/target/test-classes/-" {
permission java.util.logging.LoggingPermission "control";
};
所有类都在上面授权的codeBase中。当Capture在AppletLogging中调用静态方法时,一切正常。当AbstractJLabel在AppletLogging中调用相同的静态方法时,我得到
java.security.AccessControlException: access denied (java.util.logging.LoggingPermission control)
这是在Sun java插件版本6更新35中运行。有没有人有解释?即使我在grant codeBase块中使用以下所有内容,我也会得到相同的错误:
permission java.security.AllPermission;
请注意,Capture和AbstractJLabel从静态块调用静态方法。
答案 0 :(得分:1)
事实证明,我遇到的问题是因为每当我收到AccessControlException时,就会从Javascript调用已经运行的线程。让我解释一下,在托管applet的页面上,我有一个applet标签的引用。可以从引用applet标记的Javascript变量调用Java applet类上的公共实例方法。在这种情况下,线程,即使它是从applet(或包含主applet类的jar)运行代码,它也不会从applet代码库继承权限,因为调用来自外部。解决方案是调用需要AccessController.doPrivileged内部权限的java代码。