2011-12-08 7 views
0

私はstruts2、hibernate、springを使い、モデル駆動パターンを使っています。 2つの異なるユーザーとセッション(別のコンピュータ)を同時に使用してオブジェクトをフェッチしようとすると、深刻な問題があるようです。Struts2重大なセキュリティ上の問題?

詳細... ユーザーと名前の2つのメンバーを持つProjectオブジェクトがあるとします。 両方のユーザーは、Projectオブジェクト(もちろん、別のユーザーの別のオブジェクト)をフェッチしようとします。したがって、ユーザーAにはID 498のプロジェクトがあり、ユーザーBにはID 499のプロジェクトがあります。

strutsアクションは異なるIDを持つオブジェクトをフェッチしようとしていますが、両方のユーザー同じProjectオブジェクトインスタンスを持つため、同じ結果が表示されます。あなたはここで提供ログに見ることができる :

2011-12-08午前14時07分21秒LoginInterceptor [INFO]ユーザ17がpopulateProjectを呼び出している、paramsは:ID = 499 2011-12-08午前14時07分21秒をLoginInterceptor [INFO]ユーザー4がpopulateProjectを呼び出す、params:id = 498 2011-12-08 14:07:21 ProjectAction [INFO] Obj:[email protected]、セッションユーザーIDは17、obj.user.idは4 2011-12-08 14:07:21 ProjectAction [情報] Obj:[email protected]、セッションユーザーIDは4、obj.user.idは4

どのように解決できますか?

ありがとう、 Ron。

+0

どのようにstruts2アクションのインスタンスを作成していますか? struts2-springプラグインを使用していますか?はいの場合は、アクションインスタンスを作成する場所にスプリングファイルを表示しますか? –

+0

はい私はstruts2-springプラグインでそれを行います。私はそれぞれのアクション(またはそれらの大部分)ごとに別々のスプリング設定ファイルを持っています。 Ron

+0

バネの設定ファイルを表示できますか、さらにアクションの範囲を定義していますか? –

答えて

3

議論の通り私は問題と解決の原因を掲示しています。 スプリングプラグインによって作成されるアクションにスコープが設定されておらず、デフォルトではスコープはsingletonです。 struts2では、各アクションはドメインオブジェクトとしても機能するため、Struts2は常にリクエストごとにアクションの新しいインスタンスを作成し、それをvalueスタックに配置します。この場合スコープ内

singletonたとユーザの両方ので、問題の原因であった詳細はscope=prototype解決される問題

を.Settingによるsingleton scopeにバネによって渡される同じアクションオブジェクトは、公式プラグインのページ

参照しています

Struts2-Spring plugin

+0

ありがとうございました。問題は。 – Ron

+0

ちなみに、セッションからDBからフェッチされたオブジェクトを保存する方が良いですか?私がここで理解しているところから、はアクションの新しいインスタンスを作成します(getObjメソッドにアクセスする必要があります) – Ron

+0

新しい質問を作成することをお勧めしますこれに対して、すべてのオブジェクトをstruts2としてセッションに入れる必要はありません。値のスタックを作成し、要求オブジェクトをそこに置いてそこからアクセスできます。 –

関連する問題