Spring Boot:添加记录时将当前用户ID设为外键
解决Spring Boot日历项目中事件关联当前用户的问题
问题根源
你提交的Event对象未关联当前登录用户,导致数据库插入时user_id外键字段为空,无法完成数据插入。
修复步骤
修改@PostMapping方法,在保存事件前主动关联当前登录用户:
- 在
store方法参数中添加@AuthenticationPrincipal UserDetails userDetails,获取当前登录用户信息; - 通过用户邮箱查询对应的
User实体; - 将该
User设置到表单提交的Event对象中; - 执行保存操作。
修改后的控制器代码
@GetMapping("/events/create") public String createEvent(@AuthenticationPrincipal UserDetails userDetails, Model model) { String email = userDetails.getUsername(); User user = userService.findUserByEmail(email); model.addAttribute("user", user); model.addAttribute("event", new Event()); return "/events/create"; } @PostMapping("/events/createevent") public String store(@ModelAttribute("event") Event formEvent, @AuthenticationPrincipal UserDetails userDetails) { // 获取当前登录用户 String email = userDetails.getUsername(); User currentUser = userService.findUserByEmail(email); // 关联用户到事件 formEvent.setUser(currentUser); // 保存事件 eventService.saveOrUpdate(formEvent); return "redirect:/calendar"; }
额外注意事项
- 安全提示:禁止在前端表单中暴露或提交
user_id字段,避免恶意篡改用户关联关系,所有用户关联操作必须在后端完成; - 确保
userService.findUserByEmail方法能稳定查询到用户实体,若用户不存在可添加异常处理逻辑; - 确认Spring Security配置正确,
@AuthenticationPrincipal能正常注入当前登录用户的UserDetails实例。
内容的提问来源于stack exchange,提问作者Nicola Giovanni Caddeo
相关产品推荐
相关产品推荐

