我正在使用 Tomcat 6 上的安全策略。我已经成功地为我的整个 web 应用程序授予了权限,但只想授予特定类的一些权限。但是,当我尝试这样做时,我的 doPrivileged 块收到一个 AccessControlException。
因为我已经成功地授予了一个更通用的代码库,所以我回到了那个代码库,并在添加每个额外的子目录时进行了测试。通过这种方式,我能够做出的最具体的资助是:
授予代码库“文件:${catalina.home}/webapps/ROOT/WEB-INF/-”{
...
}
如果我添加“类/”,如:
授予代码库“文件:${catalina.home}/webapps/ROOT/WEB-INF/classes/-”{
...
}
然后我继续看到 AccessControlException。我试图允许的类位于 classes 目录下。 webapp 被部署为 .war 文件,并由 Tomcat 解压。
我在这里做错了什么?我打算遵循 Tomcat 提供的 catalina.policy 中提供的示例。
最佳答案
使用 Java 默认策略文件格式分配权限的最佳粒度是每个代码源(即,每个 JAR 或每个类目录)。作为一种解决方法,您可以在 WEB-INF/lib 中将每个具有明显特权的类拆分为它自己的 JAR,并向该 JAR 授予特定权限。
可以使用自定义 ClassLoader 为每个defineClass 创建唯一的 ProtectionDomain。 ProtectionDomains 可以静态授予每类权限,也可以创建专门的 ProtectionDomains 以允许自定义策略动态授予每类权限。
关于java - 授予单个类的权限,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3077889/