Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

186
Vistas
GraalVM: prohibir que los métodos de ciertas clases sean llamados desde scripts

Estamos utilizando GraalVM para algunos requisitos de secuencias de comandos en nuestro producto. La versión de GraalVM es 21.2.0 Estamos usando JavaScript y Groovy. Queremos prohibir el uso de algunos métodos en ciertas clases en scripts. Ejemplo :

mytest.js

 var testService=Java.type('mypackage.TestService'); new testService().forbiddenJavaMethod(); // this should not be called

TestService.java

 package mypackage; public class TestService{ public void forbiddenJavaMethod(){ // business logic } }

¿Hay alguna manera de lograr esto en Graal? No pude encontrar una manera de hacer el filtrado de "método". ¿Algún otro enfoque para resolver esto?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Puede configurar el acceso al host al configurar el contexto. A saber

 public Context.Builder allowHostAccess(HostAccess config)

https://www.graalvm.org/truffle/javadoc/org/graalvm/polyglot/Context.Builder.html#allowHostAccess-org.graalvm.polyglot.HostAccess-

Dónde se puede acceder al host

 HostAccess.EXPLICIT - Java host methods or fields, must be public and be annotated with @Export to make them accessible to the guest language.

https://www.graalvm.org/truffle/javadoc/org/graalvm/polyglot/HostAccess.html

O puede entrar en un control mucho más detallado usando HostAccess.Builder

https://www.graalvm.org/truffle/javadoc/org/graalvm/polyglot/HostAccess.Builder.html

about 4 years ago · Juan Pablo Isaza Denunciar

0

Si no puede usar HostAccess.EXPLICIT por algún motivo (por ejemplo, desea mantener el acceso a java.util, etc.), puede crear clases contenedoras personalizadas que solo expongan los métodos relevantes. Con allowHostClassLookup() puede limitar qué clases están expuestas en el motor.

 public class Example { public static void main(String[] args) { TestService service = new TestService(); Context.Builder builder = Context.newBuilder("js") .allowHostAccess(HostAccess.ALL) .allowHostClassLookup(path -> path.endsWith("TestServiceScriptable")); GraalJSScriptEngine engine = GraalJSScriptEngine.create(null, builder); engine.put("service", TestServiceScriptable.newInstance(service)); } } public class TestService { public void forbiddenJavaMethod() { System.out.println("forbidden!"); } public void allowedMethod() { System.out.println("allowed"); } } public class TestServiceScriptable { private final TestService service; private TestServiceScriptable(TestService service) { this.service = service; } public static TestServiceScriptable newInstance(TestService service) { return new TestServiceScriptable(service); } public void allowedMethod() { service.allowedMethod(); } }

Después:

 // Should work service.allowedMethod(); // Shouldn't work service.forbiddenMethod();
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda