如何防止spring mvc覆盖来自请求的sessionattributes

时间:2012-09-26 08:30:58

标签: forms spring model-view-controller

我有一个用户登录的MVC spring应用程序,它存储了一个User @SessionAttribute,我将在后面引用它。在POST请求中更新Customer对象时,我希望会话用户信息添加到此对象。 我的问题是当我在客户POST中访问@ModelAttribute(“user”)用户对象时,spring已将请求参数绑定到其中,即User.name具有提交表单中Customer.name的值。

NB我有点黑客攻击,因为所有控制器都是我的AppController的子类,这是声明@SessionAttributes的地方。但如果它是一个单一的控制器,原则就是一样的。

我可以阻止spring绑定表单:客户名值为User.name吗?

(我怀疑webflow会是一个更合适的框架,但现在没有时间用这个重写)

1 个答案:

答案 0 :(得分:1)

您可以使用@InitBinder允许或禁止绑定模型属性的某些字段:

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

但是,我不认为使用@SessionAttributes存储当前用户或其他类似对象是个好主意。 @SessionAttributes最初设计用于维护GETPOST请求之间的表单支持对象的状态,而不是作为访问会话的通用方法。

或许最好使用session - 作用域bean或自定义参数解析器来访问此类信息。