Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

185
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda