Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

178
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!