Можно ли поместить в песочницу мой Runnable в Java?Учитывая Runnable, я хочу, чтобы код внутри него (вместе с какими-либо потоками, которые он порождает) запускался в песочнице, которая позволяет коду обращаться только к определенному пути в файловой системе.Как только этот Runnable завершится, поток должен вернуться к тем нормальным разрешениям, которые у него были, в то время как для всех оставшихся порожденных потоков все равно будет применено ограничение файловой системы.
Я хочу сделать это во время выполнения.Это означает, что я хочу избежать создания файлов политики и передачи пользовательских аргументов в JVM.До сих пор я был в состоянии применить изолированную программную среду ко всему моему приложению, но я не нашел способа применить его только к Runnable, работающему в текущем потоке ...
if (System.getSecurityManager() == null) {
System.setSecurityManager(new SecurityManager());
}
CodeSource nullSource = new CodeSource(null, (CodeSigner[]) null);
PermissionCollection perms = new Permissions();
perms.add(new FilePermission(path.toAbsolutePath().toString() + "/*", "read"));
ProtectionDomain domain = new ProtectionDomain(nullSource, perms);
AccessControlContext safeContext = new AccessControlContext(
new ProtectionDomain[]{domain});
AccessController.doPrivileged((PrivilegedAction) () -> {
try {
r.run();
} catch (Exception e) {
throw new IllegalStateException(e);
}
return null;
}, safeContext);