問題タブ [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. ホワイトリストにある「new」を使用したクラスのインスタンス化のみを許可します。
  2. forName を呼び出すことができ、任意のクラスにアクセスできるため、任意のクラスで getClass メソッドへのアクセスを許可しないでください。
  3. ファイルなどのリソースへのアクセスを制限します。
  4. 式が消費するリソースの量を制限できるように、式の実行に一定の時間だけを許可します。

これは JEXL には当てはまりませんが、使用しているスクリプト言語には当てはまる場合があります。

  1. finalize メソッドはファイナライザー スレッドから呼び出され、オブジェクトの作成とコードの実行に使用されたものではなく、元の AccessControlContext で実行されるため、オブジェクトにカスタムの finalize メソッドを許可しないでください。
0 投票する
0 に答える
405 参照

java - JEXL のバリエーションの違いは何ですか?

JEXL のバリエーション間の違いを確認するのに最適な場所を知っている人はいますか? これまでに以下の点に注意しました。

表現

これにより、単一のコマンドのみが実行され、その結果が返されます。複数のコマンドを使用しようとすると、最初のセミコロンの後のすべてが無視され、最初のコマンドの結果が返されます。

脚本

これにより、複数のコマンドを式に入れることができ、変数の割り当て、ループ、計算などを使用できます。最後のコマンドの結果がスクリプトから返されます。

ユニファイド

これはテキストに最適です。計算を取得するには、${someVariable} のように EL に似た構文を使用します。括弧内の式は、式ではなく、スクリプトのように動作します。セミコロンを使用して複数のコマンドを実行でき、最後のコマンドの結果がスクリプトから返されます。

0 投票する
1 に答える
978 参照

spring - Spring mvcでJexcel名を設定するには?

私はSpringチュートリアルでmkyong Jexcelをフォローしていますが、すべてがうまく見えます.Excelファイルを作成してシートを書き込むことができます.1つのことを除いて、Excelファイル名を変更できませんか? コントローラーへのリンクと同じファイル名が表示されます。

ここに例があります

常に「report.html.xls」という Excel ファイル名が作成されます。ファイル名を変更する方法を知っている人はいますか??

これは私のコントローラーです

および buildExcelDocument メソッド

前もってありがとう、マート

0 投票する
1 に答える
1228 参照

java - JexlEngine オブジェクトを作成できません

次のクラスを書きます。

しかし、このクラスのオブジェクトを作成すると、愚かなエラーが発生します。

コンストラクターの最初の行 (JexlEngine のオブジェクトを作成する場合):

このコードが原因でエラーが発生する理由を教えてください。

PS私はこのlibを使用するために.jarファイルを使用します。

0 投票する
2 に答える
1823 参照

java - Jexl で Long to Double

apache の Jexl lib を使用していますがevaluate()、Expression クラスのメソッドの使用に問題があります。NelderMead クラスのコードは次のとおりです。

テストケースのコードは次のとおりです。

テストケースを実行すると、次のエラーが発生します。

Double にキャストできない理由がわかりません。

PS

ここに 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 で、これに関する多くのスレッドを見つけました。通常は、JavaScript を読み取ることができる Java 独自の ScriptEngine クラスを使用することをお勧めします。または、JEXL、MVEL、または次のリストにあるその他の既存のライブラリを使用することをユーザーに推奨します: http://java-source.net/open-source/expression-languages

しかし、それらはすべて信頼できるユーザーに依存しているようです (例: 自分で作成し、その中でスクリプトを実行したい構成ファイル)。しかし、私の場合、式の評価を安全なサンドボックスで実行したいと考えています。したがって、ユーザーは次のような単純なことはできません。

アプリをロックしたり、不要なリソースにアクセスしたりします。

1) セーフ ボックスで実行できるように簡単に構成できる既存のライブラリはありますか? 「簡単に」とは、独自の式エバリュエーターを作成するよりも高速に使用できる高レベルの構成 API を意味します。私自身の調査を少し行った後、JEXL と MVEL の両方が出ているようです。

2) または、信頼できないユーザーが悪用できないように非常に単純な既存の表現言語はありますか? 私が見つけたものはすべて非常に複雑で、ループや import ステートメントなどを実装しています。必要なのは、数学、論理演算子、および独自に定義した変数とメソッドを解析することだけです。それ以上のものは私の範囲外です。

3) 唯一の解決策が独自の式エバリュエーターを作成することである場合、一貫したセキュリティ モデルを作成する方法に関するガイダンスはどこにありますか? 私はこれに不慣れで、コードインジェクションに使用される一般的なトリックが何であるかわかりません。だからこそ、これを自分で書く必要は避けたかったのです。

0 投票する
1 に答える
2157 参照

java - JEXL 2.1.1 - 式文字列の大きな 10 進数リテラルが原因で解析エラーが発生する

http://commons.apache.org/jexl/reference/syntax.html#Literalsに記載されているように、 JEXL
2.1.1
を使用しています。リテラル サフィックス 'h' を使用しています。

私は例外を下回っています

0 投票する
4 に答える
15850 参照

java - ループを使用した単純な JEXL の例はありますか。単純な配列を繰り返し処理して、さまざまな文字列値を出力しようとしていますか?

ループを使用した単純な JEXL の例はありますか。単純なオブジェクト配列リストを繰り返し処理して、さまざまな文字列値を出力しようとしていますか?