2012-09-26 56 views
1

我有一个MVC弹簧应用程序,用户登录后,它存储了User @ SessionAttribute,我随后会参考它。当在POST请求中更新Customer对象时,我希望将会话用户信息添加到此对象中。 我的问题是,当我访问客户POST中的@ModelAttribute(“user”)User对象时,spring已经将请求参数绑定到它,即User.name具有来自提交表单的Customer.name的值。我如何防止弹簧mvc覆盖会话属性请求

NB我有种破解这个,所有控制器都是我的AppController的子类,这是@SessionAttributes声明的地方。但是,如果它是一个单一的控制器,原则将是相同的。

因此,我可以防止弹簧绑定形式:客户名称值为User.name?

(我怀疑的Webflow将是这个更合适的框架,但没有可用的时间,现在使用这种重写)

回答

1

可以允许或禁止某些领域的结合使用的模型属性@InitBinder

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

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

也许最好是使用session -scoped bean或自定义参数解析器来访问这类信息。

+1

谢谢。我最终明确存储在HttpSession中。这是旧的skool,但我也是。 – souter