0

GroovyCodeVisitor を使用して、禁止された型がスクリプト内にあるかどうかを確認して文句を言います。ビジターには new Banned() の試行が表示されますが、Banned を返すメソッドにアクセスすると、Object のみが表示されます。これは意図的なものですか、それとも何か不足していますか。メソッドが、単純な古い退屈な Banned を返す単純なバニラ宣言であり、問​​題の潜在的な原因としての消去を排除する必要がある形式のジェネリックを含まないことを確認したいだけです。

ジャンプする前に、SecureASTCompilationCustomizer でサポートされているブラックリストとホワイトリストやその他のものを単に追加するのではなく、マッチャーを使用してクラスを禁止しているため、SecureASTCompilationCustsomer を使用していません。

4

1 に答える 1

0

GroovyCodeVisitorは、「コード」にアクセスするためのものです。これは、たとえばメソッドの本体です。メソッドの戻りタイプは、GroovyCodeVisitorで処理するコード部分ではなく、MethodNodeに格納されます。ClassCodeVisitorSupportを使用し、visitMethod(MethodNode mn)をオーバーライドして、mn.getReturnType()を介して戻り型を取得し、それをチェックコードに渡すことができます。もちろん、メソッドの戻り型は、そのように宣言されている場合にのみ、たとえば「禁止」されます。たとえば、「def」を使用すると、戻り値のタイプはObjectになります。

于 2012-05-08T11:19:47.720 に答える