2016-09-23 1 views
1

Java API 8로 Nashorn을 사용하고 있습니다. Java 패키지를 호출 할 수없는 자바 스크립트 실행을 보안하고 싶습니다.ScriptEngineManager 메소드 getEngineByName ("nashorn")을 사용하여 인수를 추가하는 방법은 무엇입니까?

은 다음과 같이 할 수있다 :

NashornScriptEngineFactory factory = new NashornScriptEngineFactory(); 
ScriptEngine engine = factory.getScriptEngine("-strict", "--no-java", "--no-syntax-extensions"); 

그러나, NashornScriptEngineFactory를 사용하여 직접적으로 정말 좋은하지 않습니다.

좋은 방법은 ScriptEngineManager을 사용하는 것입니다. NashornScriptEngineFactoryScriptEngineManager에 의해 사용되어 ScriptEngine의 인스턴스를 만드는 공장입니다. 그것은이 documentation에 설명되어 있습니다 :

이 패키지는 Nashorn를 사용하는 선호하는 방법입니다 javax.script의 통합을 제공합니다. 당신은 통상 Nashorn 스크립트 엔진의 인스턴스를 얻기 위해이 작업을 수행합니다

import javax.script.*; 
... 
ScriptEngine nashornEngine = new ScriptEngineManager().getEngineByName("Nashorn"); 

나는 "-strict", "--no-java", "--no-syntax-extensions" 같은 몇 가지 추가 인수를 제공 할 수있는 능력 ScriptEngineManager를 사용하여 ScriptEngine을 만들 수있는 솔루션을 발견하지 않았다.

누구든지이 문제에 도움이 될 수 있습니까? 미리 감사드립니다.

답변

2

글쎄, javax.script는 스크립팅 언어 구현에 사용되는 일반적인 API입니다. 설계된대로 API는 "엔진 구성 옵션"을 전혀 제공하지 않습니다!

Nashorn 특정 API를 사용할 때의 정확한 문제점은 무엇입니까? 엔진 관련 API를 사용하고 있다고 생각합니까? 그러나 다른 엔진에서 지원하지 않을 엔진 고유의 옵션을 사용하고 있습니다. 어쨌든 특정 엔진 구현에 묶여 있습니다.

Nashorn 옵션을 지정하는 또 다른 시스템 속성 방법이 있습니다. 시스템 속성 "nashorn.args"를 정의 할 수 있습니다. 이 속성은 프로세스 전체에 적용되므로 Java 프로세스에서 생성 된 모든 Nashorn 엔진에서 사용됩니다.

은 참조 : https://wiki.openjdk.java.net/display/Nashorn/Nashorn+jsr223+engine+notes

+0

내가 -Dnashorn.args =를 사용합니다 "- 엄격한 --no-자바 --no-구문 확장". 나는 자바 스크립트 API를 계속 사용하는 것을 선호한다. 어느 날 내가 사용하는 스크립트 언어를 변경하더라도 자바 코드를 변경하는 것보다 구성을 변경하는 것이 더 쉽습니다. 당신의 도움을 주셔서 감사합니다. –

관련 문제