Oui: Utilisez le Scripting API.
Il existe des implémentations pour exécuter des scripts écrits en JavaScript, Groovy, Python et beaucoup d'autres langages.
[EDIT]
Comme il a été mentionné dans les commentaires: Méfiez-vous des problèmes de sécurité.
Il y a plusieurs options:
- Vous autorisez les clients finaux de fournir des scripts (par exemple dans un formulaire web)
- Vous ne permettent pas aux clients de fournir des scripts; Si un script doit être modifié, un administrateur ou un développeur doit démarrer un outil spécifique.
- Vous développez un système qui ne permet d'exécuter des scripts « sûrs »
Option n ° 3 ne fonctionne pas (= ne fonctionne que pour les cas les plus simples). Il existe une preuve mathématique qu'un programme informatique ne peut jamais dire ce qu'un autre programme peut potentiellement faire sans l'exécuter réellement.
Donc vous pouvez vous en sortir avec l'option # 3 si vous ne permettez pas d'appeler des méthodes (ou seulement un très, très limité ensemble de méthodes). Mais la plupart des langages de script permettent d'accéder aux classes Java ce qui signifie que vous pouvez éventuellement obtenir System.exit()
ou Runtime.exec()
. Cela signifie que vous devez écrire un analyseur qui s'assure que le code ne contient pas quelque chose d'étrange.
Ce que vous devrez mettre à jour tous les jours parce que les clients viendront avec de nouveaux ... err ... intéressant façons d'utiliser la fonctionnalité.
Il est également possible que vous fassiez une erreur - soit l'analyseur n'acceptera pas d'entrée valide, soit il laissera passer un code malveillant. Compte tenu de la complexité du problème, la chance est comprise entre 99,9999% et 100%. L'option n ° 1 signifie pas de sécurité du tout, mais après le troisième changement, les clients vous réprimanderont de l'adopter. Cela fonctionnera pendant un certain temps jusqu'à ce que le premier script kiddie arrive et ruine tout. Devinez qui sera la faute? Le directeur qui a embauché son neveu ... le gamin? Donc, un humain devra regarder les scripts, corriger tous les bogues et configurer le système pour les exécuter. L'option 2 causera toutes sortes de chagrins, mais elle causera moins de chagrin, tout bien considéré.
Ceci est correct, mais il serait bon de dire un mot ou un autre concernant la sécurité. Je préfère ne pas lancer la chaîne "Runtime.exec (\" rm -rf $ HOME \ ");" – Ingo
Oui, bien sûr, je dois prendre soin de la sécurité. –
J'ai ajouté un peu de sécurité. Prenez-le avec un grain de sel. –