1

ユーザーがログオンするMVCSpringアプリケーションがあります。これにより、User @SessionAttributeが保存されます。これは、後で参照します。たとえば、POSTリクエストでCustomerオブジェクトを更新するときに、セッションのユーザー情報をこのオブジェクトに追加します。私の問題は、顧客POSTの@ModelAttribute( "user")Userオブジェクトにアクセスすると、Springが要求パラメーターをバインドしていることです。つまり、User.nameは送信されたフォームのCustomer.nameの値を持っています。

注意:すべてのコントローラーがAppControllerのサブクラスであり、@SessionAttributesが宣言されているという点でこれをハッキングしました。しかし、それが単一のコントローラーである場合、原理は同じです。

では、form:customer nameの値がUser.nameにバインドされるのを防ぐことはできますか?

(これにはwebflowの方が適していると思いますが、これを使用して書き直す時間は今のところありません)

4

1 に答える 1

1

以下を使用して、モデル属性の特定のフィールドのバインドを許可または禁止できます@InitBinder

@InitBinder("user")
public void configureBindingOfUser(WebDataBinder binder) {
    binder.setAllowedFields(); // No fields allowed
}

@SessionAttributesただし、現在のユーザーまたは他の同様のオブジェクトを保存するために使用するのは良い考えではないと思います。はもともと、セッションにアクセスするための汎用的な方法としてではなく、とリクエスト@SessionAttributes の間でフォーム バッキング オブジェクトの状態を維持するために設計されました。GETPOST

sessionこの種の情報にアクセスするには、-scoped Bean またはカスタム引数リゾルバーを使用する方がよいでしょう。

于 2012-09-26T11:23:23.917 に答える