问题标签 [mvel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 如何在沙盒中评估用户表达式
我希望我的应用程序评估来自不受信任用户的表达式,我将从 JSON 文件中读取该表达式。如:
我在 StackOverflow 上找到了很多关于此的主题。通常推荐使用Java自带的ScriptEngine类,可以读取JavaScript。或者建议用户使用现有的库,如 JEXL、MVEL 或此列表中的任何其他库:http: //java-source.net/open-source/expression-languages
但是它们似乎都依赖于受信任的用户(例如:您自己编写的配置文件并希望在其中执行一些脚本)。但就我而言,我希望我的表达式评估在安全的沙箱中运行。所以用户不能做一些简单的事情:
并锁定我的应用程序,或访问不需要的资源。
1)那么这些现有的库中是否有任何一个能够轻松配置以便它可以在保险箱上运行?'容易',我的意思是高级配置 API,我使用它比编写我自己的表达式评估器更快。在做了一些我自己的研究之后,JEXL 和 MVEL 似乎都出局了。
2) 或者是否存在一种非常简单的现有表达语言,以至于不受信任的用户无法利用它?我发现的所有东西都非常复杂,并且实现了循环、导入语句等。我所需要的只是解析数学、逻辑运算符以及我自己定义的变量和方法。除此之外的任何事情都超出了我的范围。
3)如果唯一的解决方案是编写我自己的表达式评估器,那么我在哪里可以找到一些关于如何编写一致的安全模型的指导?我是新手,不知道用于代码注入的常用技巧是什么。这就是为什么我想避免自己写这个。
java - 与 Velocity 和 Mvel 相比,Stringtemplate 的性能较低
我正在尝试对模板框架进行一些评估。
对于简单的性能测试,我正在使用这些模板
Stringtemplate 的部分是
结果是
由于我不知道字符串模板,这是我的问题:
StringTemplate 真的那么慢还是有其他(更快)的方式来渲染模板。
更新:
vars 看起来像这样:
现在每个模板有 1.000.000 次迭代,并将整个基准测试循环 10 次
elasticsearch - 使用 Elasticsearch 自定义脚本字段检查参数数组中是否存在 id
如果文档的 id 存在于作为参数发送的数组中,是否可以添加一个布尔值的自定义脚本字段并返回 true?
像这样的东西https://gist.github.com/2437370
使用 mvel 执行此操作的正确方法是什么?
更新: 无法按照 Imotov 的回答中指定的方式工作。
映射:
种类:
:sort=>{:_script=>{:script=>"return friends_visits_ids.contains(_fields._id.value)", :type=>"string", :params=>{:friends_visits_ids=>["4f8d425366eaa71471000011"]}, :order=>"asc"}}}
place: {
properties: {
_id: { index: "not_analyzed", store: "yes" },
}
}
我没有收到任何错误,只是文档没有正确排序。
更新 2
哦,我确实在文件上得到了这个:
"sort"=>["false"]
java - 获取带有 MVEL 中参数的运行时值的表达式
我正在使用 MVEL 来执行一个数学公式的表达式。表达式是这种格式
10 * 可用SI
我有一个 DataObject,它有 availableSI 作为参数,它有它的 getter 和 setter。
当我说 MVEL.eval(expression,DataObject) 时,它通过从数据对象中查找 availableSI 的值来执行表达式并返回最终结果
但是,我需要具有 availableSI 运行时值的表达式(如果avaiableSI 为 1000),10 * 1000
需要帮忙。
el - 列出 EL 表达式中的自由变量
我有一个应用程序,其中包含一些用于编程配置的 EL 评估。给定一个 EL 表达式,我想在不实际评估它的情况下获得它包含的自由变量。目的是提供一个 UI,最终用户可以在按下“评估”按钮之前将值绑定到自由变量。
不幸javax.el.ValueExpression
的是不提供这个功能,所以我可能需要使用特定于供应商的 API。它还处于开发的早期阶段,所以我还没有确定我的实现选择。我想到了 MVEL、JUEL 和 SpEL,但当然我选择的任何东西都应该具有我上面描述的功能。
mvel - 如何创建 MVEL 评估上下文?
我想按如下顺序解析 MVEL:
这可能吗?如果是这样,怎么做?
java - 定义和重用 MVEL 函数
是否可以使用 MVEL 定义一些自定义预编译函数并在另一个编译表达式中使用一个?如果我尝试以下操作:
我Exception in thread "main" [Error: duplicate function: hello]
第二次尝试执行它时得到。
看起来我不应该在表达式本身,而是在某种上下文中声明函数。我用 ParsedContext 玩了一段时间,但总是得到Exception in thread "main" [Error: unable to access property (null parent): hello]
.
Internet 上充满了涵盖不同 MVEL 语言使用主题的教程,但此类嵌入主题的文档记录非常差。你能给我一些线索我做错了什么吗?
PS我不想从Java执行某些功能。我需要用 MVEL 动态定义它们。
multimap - 使用 MVEL 针对多图评估规则
只是想知道如何使用 MVEL 针对多图评估规则。
IE:
foo
上下文中的可能值[100, 200, 300]
。
我不知道哪些是可能的值,所以我不能将它们作为规则的一部分。
理想情况下,我希望能够做这样的事情:
mvel - 如何为 MVEL 创建自定义 Orb 标签
我正在使用 MVEL 2.x 生成一些电子邮件,并且想知道是否可以创建自定义 Orb 标签。我在 stackoverflow 和 google 上搜索过,但找不到任何东西。
java - 使用 MVEL 有什么好处?
我正在学习jBPM引擎,我注意到它在流程设计中默认使用MVEL方言。那么问题来了:使用 MVEL 而不是纯 Java 有什么优势呢?如果我开始用 Java 编写更复杂的流程,我会遇到麻烦吗?