是否可以从nashorn引擎隐藏或删除java api?这样它只能看到或使用带有某些特别暴露的函数/变量的“默认” ECMAScript 262
Edition 5.1?
我想让我的最终用户为自己创建一些特定的逻辑,而不必担心他们会破坏整个系统。当然,nashorn引擎等中可能存在一些安全漏洞,但这是不同的话题。
编辑:对不起,我忘了提及我在Java应用程序中运行nashorn,因此无法使用任何命令行参数。
好的,这是带有一些限制参数的示例类:
package com.pasuna;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
import jdk.nashorn.api.scripting.NashornScriptEngineFactory;
public class ScriptTest {
public static class Logger {
public void log(String message) {
System.out.println(message);
}
}
public static class Dice {
private Random random = new Random();
public int D6() {
return random.nextInt(6) + 1;
}
}
public static void main(String[] args) {
NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
ScriptEngine engine = factory.getScriptEngine(new String[]{"-strict", "--no-java", "--no-syntax-extensions"});
//note final, does not work.
final Dice dice = new Dice();
final Logger logger = new Logger();
engine.put("dice", dice);
engine.put("log", logger);
engine.put("hello", "world");
try {
engine.eval("log.log(hello);");
engine.eval("log.log(Object.keys(this));");
engine.eval("log.log(dice.D6());"
+ "log.log(dice.D6());"
+ "log.log(dice.D6());");
engine.eval("log.log(Object.keys(this));");
engine.eval("Coffee"); //boom as should
engine.eval("Java"); //erm? shoud boom?
engine.eval("log = 1;"); //override final, boom, nope
engine.eval("log.log(hello);"); //boom
} catch (final ScriptException ex) {
ex.printStackTrace();
}
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = "";
do {
try {
input = br.readLine();
engine.eval(input);
} catch (final ScriptException | IOException se) {
se.printStackTrace();
}
} while (!input.trim().equals("quit"));
try {
engine.eval("var add = function(first, second){return first + second;};");
Invocable invocable = (Invocable) engine;
Object result = invocable.invokeFunction("add", 1, 2);
System.out.println(result);
} catch (final NoSuchMethodException | ScriptException se) {
se.printStackTrace();
}
Object l = engine.get("log");
System.out.println(l == logger);
}
}
有关标志的更多信息,可以在这里找到:http
:
//hg.openjdk.java.net/jdk8/jdk8/nashorn/rev/eb7b8340ce3a
(nashorn文档的imho atm很差)
是否可以从nashorn引擎中隐藏或删除java api?所以它只能看到或使用“默认”ECMAScript 262版本5.1,以及一些特别公开的函数/变量? 我想让我的最终用户为自己创建一些特定的逻辑,而不用担心他们会入侵整个系统。当然,nashorn引擎中可能存在一些安全漏洞等,但这是不同的主题。 编辑:很抱歉,我忘了提到我正在java应用程序中运行nashorn,所以不能使用命令行参数。
我对SqlAlchemy和Firebird DB是新手。 我可以直接使用DBeaver创建一个表: 但如果我尝试使用pyndas sqlalchemy执行同样的操作,我会得到一个错误: 问题是由引号
我正在尝试使用新的Java 8 Nashorn javascript引擎运行javascript脚本,但失败,出现以下错误: 脚本使用应在全局作用域中定义的readfull函数,nashorn在启用脚本模式的情况下运行(如图所示,在通过脚本引擎运行时,默认为启用脚本模式)http://mail.openjdk.java.net/pipermail/nashorn-dev/2013-December
问题内容: 在每行末尾添加\ n,结束程序正常工作,仅在最后一行工作… 请举个例子,我在任何解决方案中都尝试不了什么,而我发现这里不适合我。 问题答案: 您可以分割最后一个字符: 也许更好的方法是使用字符串库:
问题内容: 如何从静态页面的网址中删除? 另外,我需要将任何网址重定向到没有该网址的网址。(即到)。 问题答案: 感谢您的答复。我已经解决了我的问题。假设我的页面在下,则适用以下.htaccess 规则。
问题内容: 这是一种提交方法: 有可能做下面的事情吗? 我如何从中删除或修改值 问题答案: 除了将项目追加到FormData对象之外,您不能执行任何其他操作。参见规格。如果在实际构造对象之前使用词典/对象存储要添加/修改的所有值,那会更好。