3

と一致しませんでした。私がtrueにstruts.enable.DynamicMethodInvocationセットを持ってStruts2の警告:パラメータは、私はStruts2.3.28を使用しています受け入れパターン

WARN com.opensymphony.xwork2.interceptor.ParametersInterceptor 
    warn- Parameter [method:save] didn't match accepted 
    pattern [[\w+((\.\w+)|(\[\d+\])|(\(\d+\))| 
    (\['(\w|[\u4e00-\u9fa5])+'\])|(\('(\w|[\u4e00-\u9fa5])+'\)))*]]! 

:私はmethod属性でsubmitタグを使用してフォームを送信すると、私はこの警告を取得しています。

は、私は(それはそう、ホワイトリストの並べ替え) ParametersInterceptorため、この acceptParamNamesプロパティを考えて、いくつかの最近のバージョンで追加されました...ドキュメントがのみ(基本的に)

「この手を触れないでください」と言います 。

グレート!だから、何私はまだsubmitタグのmethod属性を使用したい場合は行うことになっていますか?

さらに:この警告の意味は私には明らかではありません。パターンは、ホワイトリスト(acceptParamNames)もブラックリスト(excludeParams)(ああ、一貫性)どちらと一致しない場合、何が起こることになっていますか?

+0

2.3.28を使用してもよろしいですか?受け入れられたパターンまたは除外されたパターンを修正しましたか?プロジェクトで問題を再現できません。 –

+0

おそらくあなたはdevmodeを設定する必要がありますか? https://struts.apache.org/docs/devmode.html – leonbloy

+1

[デフォルト除外パターン](https://github.com/apache/struts/blob/support-2-3/xwork-core/src/main/) java/com/opensymphony/xwork2/security/DefaultExcludedPatternsChecker.java#L21)は 'method:'と 'isExcluded'を除いています(これは前にあります)(https://github.com/apache/struts/blob/support-2-3/ xwork-core/src/main/java/com/opensymphony/xwork2/interceptor/ParametersInterceptor.java#L386) 'isAccepted'を実行します。除外パターンを修正しましたか? –

答えて

1

それはパラメータ名を受け付けパターンのリストに一致する場合、それは、名前の長さをチェックした後(このインターセプタによって渡されることを意味する方法

protected boolean isAccepted(String paramName) { 
     AcceptedPatternsChecker.IsAccepted result = acceptedPatterns.isAccepted(paramName); 
     if (result.isAccepted()) { 
      return true; 
     } 
     notifyDeveloper("Parameter [#0] didn't match accepted pattern [#1]!", paramName, result.getAcceptedPattern()); 
     return false; 
    } 

から起動された現像剤通知です除外されていない場合)。

新しいインターセプタは、パラメータ値の受け入れをチェックします。

パラメータのホワイトリストとブラックリストは、別途ParameterNameAware作用によって管理されています。

注: ParameterNameAware#acceptableParameterName(String)あなたは ParameterNameAware#acceptableParameterName(String)でそれを受け入れることができ ParametersInterceptor場合は除外指定されたパラメータ名を意味しているParametersInterceptorに優先 を取るよう

ParameterNameAwareを使用するのは危険である可能性があります。あなたはインターセプタの設定でパラメータacceptParamNamesを使用していなかったので、もし


パターンのデフォルトリストは、(それがデフォルト一定の値を使用してハードコードされます)初期化時に決済されるため、Strutsは、デフォルトのパターンのリストを使用します。しかし、このパラメーターをパラメーター・インターセプターに指定することによって、パラメーター値をオーバーライドすることができます。

注のみdevModeに印刷する必要がnotifyDeveloper方法、それ以外の場合のみロガーのDEBUGモードで印刷します。また、ロガーレベルをTRACEに変更してマッサージをトレースすることもできます。


あなたがすべき提出するタグのmethod属性を使用するには:

<constant name="struts.enable.DynamicMethodInvocation" value="true"/> 

2.上書き除外パターンのリスト:

  1. をDMIを有効にします。 除外パターンのデフォルトリストには、method:パラメータ(およびaction:も含まれています)を除いたパターンが含まれています。それはまた、commentのAleksandrMによって言及されています。

    詳細については、params interceptorのマニュアルを参照してください。

+0

DMIを使用するには除外パターンを無効にする必要はありません。パラメータマッピングの前にDMIが発生します。 –

+0

更新されました。 –

+0

OPは既にその制限を削除しているため、省略しました。 –

関連する問題