授予单个班级的权限

Posted

技术标签:

【中文标题】授予单个班级的权限【英文标题】:Grant permission to single class 【发布时间】:2010-06-20 01:32:26 【问题描述】:

我正在使用 Tomcat 6 上的安全策略。我已成功授予整个 web 应用程序的权限,但只想授予特定类的某些权限。但是,当我尝试这样做时,我的 doPrivileged 块会收到 AccessControlException。

因为我已成功授予更通用的代码库,所以我回到该代码库,并在添加每个附加子目录时进行测试。通过这种方式,我能够获得的最具体的资助是:

grant codeBase "file:$catalina.home/webapps/ROOT/WEB-INF/-" ...

如果我添加“classes/”,如:

grant codeBase "file:$catalina.home/webapps/ROOT/WEB-INF/classes/-" ...

然后我继续看到 AccessControlException。我试图允许的类位于类目录下。 webapp 被部署为 .war 文件,并由 Tomcat 解包。

我在这里做错了什么?我打算按照 Tomcat 提供的 catalina.policy 中提供的示例进行操作。

【问题讨论】:

我不确定你想用这个来完成什么。通常权限基于每个用户。 我试图告诉 Java SecurityManager 允许某些类执行某些操作。 (见tomcat.apache.org/tomcat-6.0-doc/security-manager-howto.html 【参考方案1】:

使用 Java 默认策略文件格式分配权限的最精细粒度是每个代码源(即每个 JAR 或每个类目录)。作为一种解决方法,您可以在 WEB-INF/lib 中将每个具有明显特权的类拆分为自己的 JAR,并为该 JAR 授予特定权限。

可以制作一个自定义类加载器来为每个定义类创建唯一的保护域。 ProtectionDomain 可以静态授予每类权限,也可以创建专门的 ProtectionDomain 以允许自定义策略动态授予每类权限。

【讨论】:

以上是关于授予单个班级的权限的主要内容,如果未能解决你的问题,请参考以下文章

如何在单个命令中创建目录并授予权限

AWS-IAM:授予对单个存储桶的访问权限

ORACLE把一个用户下的所有表权限赋予另一个用户?

如何在gke中为用户授予名称空间访问权限?

MYSQLl给用户授予数据库表权限

授予对另一个类的访问权限而不暴露它