ich würde gern ein Programm schreiben das Erweiterungen unterstützt. Die Erweiterungen sollen als Java Klasse geladen werden und von jeder Person eingereicht werden können. Ich will jedoch erreichen das die Methoden dieser Klasse nicht die vollen Rechte haben um keinen Schaden am System oder Programm anrichten zu können.
Die Erweiterung soll lediglich in der Lage sein ein Teil der GUI zu stellen und auf die interne HSQLDB können.
Kann man mit dem Security Manager iwas basteln so das die geladenen Klassen lediglich auf einer von mir zu Verfügung gestellte API zugreifen können und auf keinen Fall Dateien löschen oder ähnliches können
Oder, kann man dieses Problem anders besser lösen?
Leider muss ich dir mitteilen das dies in Java nicht möglich ist. Zwar würde J# diese Möglichkeiten bieten, jedoch setzt dieses dann nicht mehr auf Java sondern auf .Net auf.
Falls das Thema noch aktiv ist, du könntest dir mal Eclipse RCP oder allgemein OSGI anschauen. Damit kannst du sogar Komponenten zur Laufzeit laden und austauschen. Das Framework benötigt allerdings etwas Einarbeitungszeit und bis es stabil funktioniert noch etwas mehr. Wahrscheinlich ist es daher zu groß für dein Problem.
Eine andere, etwas einfachere Möglichkeit wäre es, dir ein Interface zu schreiben, das den Zugriff auf dein Hauptsystem, die GUI und die Datenbank erlaubt. Dann müsstest du über Reflections einen Konstruktor der Fremdklasse holen, der nur genau dieses Interface als Parameter bekommt (gibst du deinen Fremdprogrammierern als Constraint mit) und instantiierst diese Klasse mit einer konkreten Implementation deines Interfaces. Schlüsselpunkt wäre es, dein Interface entsprechend deiner Wünsche sicher zu machen. Da du Fremdcode ausführst, wird sich leider nicht verhindern lassen, dass von dort auch beliebiger Code ausgeführt wird oder jemand die Virtual Machine beendet. Dein Programm selber bekommst du mit obigen Tipps allerdings einigermaßen geschützt.
"Da du Fremdcode ausführst, wird sich leider nicht verhindern lassen, dass von dort auch beliebiger Code ausgeführt wird" und genau das ist sein Problem. In .Net zum Beispiel kann ich Plugins laden, ihnen die Rechte für Dateisystemoperationen entziehen und selbst wenn das Teil abstürzt ziehts den Host nicht mit runter.