2016-09-23 3 views
1

私はJava API 8でNashornを使用しています。Javaパッケージを呼び出すことができないようにjavascriptの実行を保護したいと思います。ScriptEngineManagerメソッドで引数を追加する方法getEngineByName( "nashorn")?

それは次のように可能である:

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

しかし、直接NashornScriptEngineFactoryを使用することは本当に素敵ではありません。

良い方法はScriptEngineManagerを使用することです。 NashornScriptEngineFactoryは、ScriptEngineManagerによって使用される工場で、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-javaの--no-構文の拡張機能"。私はJavaスクリプトapiを使い続けることを好みます。ある日、私が使用するスクリプト言語を変更しても、Javaコードを変更するよりも設定を変更する方が簡単です。ご協力いただきありがとうございます。 –

関連する問題