После реализации моей платформы, позволяющей динамически загружать файлы JAR с помощью отражения, я столкнулся с проблемой безопасности.Файл jar может быть «опасным» и содержать код, который может на что-то повлиять, поэтому на SO я сталкиваюсь с использованием SecurityManager
.
. Я загружаю файл jar следующим образом (пример с жестким кодомфайл):
URLClassLoader clsLoader = URLClassLoader
.newInstance(new URL[] { new URL("file:/C://Temp/SettingsApp.jar") });
Class<?> cls = clsLoader.loadClass("iezon.app.SettingsApp");
JPanel settingsApp = (JPanel) cls.newInstance();
Я пытался использовать SecurityManager
примерно так:
try {
SecurityManager sm = new SecurityManager();
Object context = sm.getSecurityContext();
sm.checkPermission(new AllPermission(), context);
settingsAppPanel = (JPanel) cls.newInstance();
} catch (AccessControlException e) {
e.printStackTrace();
}
Тест с AllPermission()
работает и дает мне следующее исключение:
java.security.AccessControlException: доступ запрещен ("java.security.AllPermission" "" "")
Однако я не могу найти какую-либо информацию о том, как связать банкуфайл для этого менеджера безопасности, а не текущей платформы.Я просто не хочу, чтобы файл jar мог открывать сокеты и т. Д. Без предварительного запроса разрешений, которые затем может принять пользователь.
Я наткнулся на BasicPermission
, однакоЭто абстрактный класс, и его нельзя создавать как AllPermission
, и, соответственно, я не могу найти какую-либо информацию о приближении к нему.Любая помощь будет оценена!