在同一代码库中具有小程序类的AccessControlException



我有三个类,一个叫做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在AppletLoging中调用相同的静态方法时我得到

java.security.AccessControlException: access denied (java.util.logging.LoggingPermission control)

这在Sun java插件版本6更新35中运行。有人能解释吗?我得到相同的错误,即使我所有以下的授予代码基本块:

  permission java.security.AllPermission;

请注意,Capture和AbstractJLabel从静态块调用静态方法。

事实证明,我面临的问题是因为每当我得到AccessControlException时,一直在运行的线程都会从Javascript中调用。让我解释一下,在小程序所在的页面上,我引用了小程序标记。可以从引用小程序标记的Javascript变量中调用Java小程序类上的公共实例方法。在这种情况下,即使线程正在运行来自小程序(或包含主小程序类的jar)的代码,它也不会继承来自小程序代码库的权限,因为调用来自外部。解决方案是调用需要AccessController.doPrivileged.内部权限的java代码

最新更新