Estoy desarrollando un sistema que permite a los desarrolladores cargar scripts groovy personalizados y plantillas freemarker.Código Sandboxing Java/Groovy/Freemarker - Prevención de la ejecución de métodos específicos
Puedo proporcionar un cierto nivel de seguridad a un nivel muy alto con la infraestructura de seguridad Java predeterminada, es decir, evitar que el código acceda al sistema de archivos o a la red, pero necesito restringir el acceso a métodos específicos.
Mi plan era modificar los tiempos de ejecución de Groovy y Freemarker para leer Anotaciones que incluirían en la lista blanca o en la lista negra ciertos métodos, sin embargo esto me obligaría a mantener una versión bifurcada de su código, lo cual no es deseable.
Todo lo que esencialmente necesito poder hacer es evitar la ejecución de métodos específicos cuando se me llama desde Groovy o Freemarker. He considerado un truco que vería la pila de llamadas, pero este sería un golpe de velocidad enorme (y bastante desordenado).
¿Alguien tiene alguna otra idea para implementar esto?
En muchos (la mayoría) de los casos, la clase en la que se encuentra el método no se conocerá en tiempo de compilación, por lo que analazying the AST no funcionará realmente. Aún así, esta es la mejor respuesta aquí, así que marcaré esta. Terminé encontrando una solución decente usando Metaclasses. –