问题标签 [jexl]

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.

0 投票
1 回答
4014 浏览

java - 你能在 JEXL 脚本中定义函数吗?

JEXL 脚本与 JEXL 表达式不同。

我在源代码中看到对函数的引用,但没有看到有关它的文档。它可能还没有实施吗?

它有一个 JSR-223 接口。

0 投票
1 回答
2798 浏览

java - 如何创建安全的 JEXL(脚本)沙箱?

我正在为要执行的 JEXL 脚本创建一个沙箱,以便恶意用户无法访问我们授予他们访问权限的变量之外的数据,也无法对服务器执行 DOS 攻击。我想为其他也这样做的人记录这一点,并让其他人对这种方法的投入。

以下是我知道需要解决的问题的列表:

  1. 只允许使用白名单上的“新”实例化类。
  2. 不允许访问任何类的 getClass 方法,因为这样可以调用 forName 并且可以访问任何类。
  3. 限制对文件等资源的访问。
  4. 只允许表达式执行一定的时间,以便我们可以限制它消耗的资源量。

这不适用于 JEXL,但可能适用于您使用的脚本语言:

  1. 不允许对象具有自定义的 finalize 方法,因为 finalize 方法是从终结器线程调用的,并且将使用原始 AccessControlContext 执行,而不是用于创建对象并执行其中的代码的方法。
0 投票
0 回答
405 浏览

java - JEXL 的变体之间有什么区别?

有谁知道我可以去查看 JEXL 变体之间差异的最佳位置?到目前为止,我已经注意到以下内容。

表达

这只允许执行单个命令并返回结果。如果您尝试使用多个命令,它会忽略第一个分号之后的所有内容,只返回第一个命令的结果。

脚本

这允许您在表达式中放置多个命令,并且可以使用变量赋值、循环、计算等。最后一个命令的结果从脚本返回。

统一

这是文本的理想选择。要进行计算,请使用 ${someVariable} 中类似 EL 的语法。括号之间的表达式的行为类似于脚本,而不是表达式。您可以使用分号来执行多个命令,最后一个命令的结果会从脚本中返回。

0 投票
1 回答
978 浏览

spring - 如何在 Spring mvc 中设置 Jexcel 名称?

我正在关注mkyong Jexcel 和 Spring 教程,一切看起来都很好。它可以创建 excel 文件和写表,除了一件事是我不能更改我的 excel 文件名?它将显示与我的控制器链接相同的文件名。

这是示例

它将始终创建 excel 文件名“report.html.xls”。谁知道怎么改文件名??

这是我的控制器

和 buildExcelDocument 方法

提前致谢, 玛特

0 投票
1 回答
1228 浏览

java - 无法创建 JexlEngine 对象

我写了以下课程:

但是我创建这个类的对象我有一个愚蠢的错误:

在构造函数的第一行(创建 JexlEngine 的对象时):

你能帮我吗 - 为什么这段代码会导致错误?

PS 我使用 .jar 文件来使用这个库。

0 投票
2 回答
1823 浏览

java - 长期在 Jexl 中翻倍

evaluate()我使用来自 apache 的 Jexl lib,并且在使用Expression 类的方法时遇到了一些问题。这是 NelderMead 类的代码:

测试用例的代码是:

当我运行测试用例时,会导致以下错误:

我不明白为什么它不能转换为 Double?

附言

是evaluate() 函数的javadoc。

0 投票
2 回答
3021 浏览

java - 为什么jexl calc算术错误

我使用JEXL库来计算具有不同参数的数学表达式(例如 y=2x+a^2-4*a*x 其中 (x=1&a=3)、(x=5&a=-15) 等)。它适用于简单的表达式,但当我开始使用更难的表达式时 - 它不起作用。这是运行良好的代码:

但这一个打印错误的答案:

我做错了什么?

0 投票
1 回答
1760 浏览

java - 如何在沙盒中评估用户表达式

我希望我的应用程序评估来自不受信任用户的表达式,我将从 JSON 文件中读取该表达式。如:

我在 StackOverflow 上找到了很多关于此的主题。通常推荐使用Java自带的ScriptEngine类,可以读取JavaScript。或者建议用户使用现有的库,如 JEXL、MVEL 或此列表中的任何其他库:http: //java-source.net/open-source/expression-languages

但是它们似乎都依赖于受信任的用户(例如:您自己编写的配置文件并希望在其中执行一些脚本)。但就我而言,我希望我的表达式评估在安全的沙箱中运行。所以用户不能做一些简单的事情:

并锁定我的应用程序,或访问不需要的资源。

1)那么这些现有的库中是否有任何一个能够轻松配置以便它可以在保险箱上运行?'容易',我的意思是高级配置 API,我使用它比编写我自己的表达式评估器更快。在做了一些我自己的研究之后,JEXL 和 MVEL 似乎都出局了。

2) 或者是否存在一种非常简单的现有表达语言,以至于不受信任的用户无法利用它?我发现的所有东西都非常复杂,并且实现了循环、导入语句等。我所需要的只是解析数学、逻辑运算符以及我自己定义的变量和方法。除此之外的任何事情都超出了我的范围。

3)如果唯一的解决方案是编写我自己的表达式评估器,那么我在哪里可以找到一些关于如何编写一致的安全模型的指导?我是新手,不知道用于代码注入的常用技巧是什么。这就是为什么我想避免自己写这个。

0 投票
1 回答
2157 浏览

java - JEXL 2.1.1 - 表达式字符串中的大十进制文字导致解析错误

我正在尝试在表达式字符串中使用 BigDecimal Literal
我正在使用 JEXL 2.1.1
我正在使用http://commons.apache.org/jexl/reference/syntax.html#Literals中提到的文字后缀“h”

我低于异常

0 投票
4 回答
15850 浏览

java - 有没有人有任何使用循环的简单 JEXL 示例。我希望遍历一个简单的数组以输出各种字符串值?

有没有人有任何使用循环的简单 JEXL 示例。我希望遍历一个简单的对象数组列表以输出各种字符串值?