gpt4 book ai didi

线程上的 Java 安全管理器

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:15:56 27 4
gpt4 key购买 nike

我有一个使用各种第三方 API 的应用程序,其中一个第三方 API 在单独的线程中执行。

我希望一个特定线程可以访问特定目录并限制该线程访问我本地磁盘的其他目录。

这是否可以通过 java 安全管理器实现?

最佳答案

如果我没理解错的话,听起来您想要做的是限制对您正在使用的第三方库之一的文件系统的访问。就 Java SecurityManager 而言,这个特定的第三方库在单独的线程中运行这一事实无关紧要:Java 安全策略根据代码的加载位置、是否已签名或签名的用户授予权限运行代码,但不基于代码在哪个线程中运行。

要限制特定库对文件系统某些区域的访问,您需要一个策略文件,该文件向您的所有其他代码授予必要的权限,并对您要限制的库授予有限的权限。假设您正在运行的代码位于一组单独的 jar 文件中,并且您不想对任何其他代码施加任何限制,您的策略文件将如下所示:

grant codebase "file:/path/to/your-application.jar" {
permission java.security.AllPermission;
};

grant codebase "file:/path/to/trusted-library.jar" {
permission java.security.AllPermission;
};

grant codebase "file:/path/to/another-trusted-library.jar" {
permission java.security.AllPermission;
};

grant codebase "file:/path/to/restricted-library.jar" {
permission java.io.FilePermission "/path/to/particular/directory", "read,write";
// Any additional permissions this library needs
};

可能需要反复试验才能发现您需要向受限库授予哪些其他特定权限才能使其正常运行。

如果您的要求确实是限制对特定线程的访问,则需要编写自定义 SecurityManager 并覆盖 checkPermission 方法,以便它们检查哪个线程正在调用该方法以确定是否应授予权限.您需要向自定义 SecurityManager 添加方法,以允许您的应用程序代码注册哪些线程应该受到限制,并且您需要确保这些额外的方法不能被受限代码调用,例如通过创建和检查自定义权限。

编写自定义 SecurityManager 通常比使用标准 SecurityManager 风险更大,因此如果您采用这种方法,您需要进行一些仔细的测试。

关于线程上的 Java 安全管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20463934/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com