我正在尝试为用户创建一个表单,在我的Web应用程序中更改它自己的私有数据(地址,年龄......):
观点:
public class UserDetailsView {
private Long userId;
private String name;
...
}
在表单页面的@GetMapping
中,我将所有用户数据加载到表单视图,然后将加载的视图发送到Thymeleaf并创建最终的HTML,所有这些进程都正常工作。
我的问题是:
由于显而易见的原因,表单没有userId
变量的字段,我不想为ID创建隐藏字段,以避免可以轻易改变{{1}的恶意用户} field。
如何在服务器端保留相同的userId
实例以保留UserDetailsView
变量内容,只需更改与表单中字段相关的变量? Actualy我的解决方案是在数据库中搜索已登录用户获取它的ID,然后更新UserDetails表。
答案 0 :(得分:0)
如果用户只能更改与自己相关的数据,只需在会话中保留userId(以及可能需要在整个应用程序中使用的其他用户详细信息)。
答案 1 :(得分:0)
首先,如果您尝试提交表单,则应使用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?