Если я правильно понимаю, похоже, что вы хотите ограничить доступ к файловой системе для одной из сторонних библиотек, которые вы используете. Что касается 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, поэтому вы захотите провести тщательное тестирование, если вы примете этот подход.