【问题标题】:how do I prevent spring mvc overwriting sessionattributes from request如何防止spring mvc从请求中覆盖sessionattributes
【发布时间】:2012-09-17 20:05:06
【问题描述】:

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

NB 我有点破解了这一点,因为所有控制器都是我的 AppController 的子类,这是声明 @SessionAttributes 的地方。但是如果是单控制器,原理是一样的。

那么我可以防止spring绑定表单:客户名称值到User.name吗?

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

【问题讨论】:

    标签: forms spring model-view-controller


    【解决方案1】:

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

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

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

    也许使用session-scoped beans 或自定义参数解析器来访问此类信息会更好。

    【讨论】:

    • 谢谢。我最终明确地存储在 HttpSession 中。这是老派,但我也是。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 2021-02-08
    • 2014-05-19
    • 2020-07-23
    • 1970-01-01
    相关资源
    最近更新 更多