如何在春季

问题描述:

创建一个数据改变形式

我试图创建一个表单给用户改变它在我的web应用程序自己的私人数据(地址,年龄...):如何在春季

  • 视图:

    public class UserDetailsView { 
    
        private Long userId; 
        private String name; 
        ... 
    } 
    

    在表单页面加载我所有的用户数据表单视图,然后发送加载视图Thymeleaf并创建最终的HTML的@GetMapping,这一切proccess工作正常。

  • 我的问题是:

出于显而易见的原因,形式不具有的一个字段userId变量,我并不想创建一个隐藏字段的ID,以避免恶意用户那可以很容易地改变userId字段。

  • 我的问题是:

如何保持在服务器端相同UserDetailsView实例来保持userId变量的内容,只是改变形式相关领域的变量?实际上,我的解决方案是在数据库中搜索记录的用户以获取它的ID,然后更新UserDetails表。

如果用户只能更改与自己相关的数据,只需在会话中保留userId(以及可能在应用程序中需要的其他用户详细信息)即可。

+0

但对于其他类型的数据,而不是用户信息登录的用户的例子吗?例如:用户想要改变来自“1-n”关系的一个寄存器的数据,就像其中一本书的描述一样。我不知道我是否清楚 –

首先,如果你想提交你应该使用POST方法的形式 @GetMapping是由注释,为@RequestMapping(method = RequestMethod.GET)

快捷方式的行为,你应该在你的控制器的方法可以用什么像

@RequestMapping(value = "/update", method = RequestMethod.POST) 

其次,试图更新他的详细信息的用户应该已经登录并进行身份验证。它不应该来自形式。这里是如何开始使用Spring Security的

How to get the current logged in user object from spring security?