You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot:添加记录时将当前用户ID设为外键

解决Spring Boot日历项目中事件关联当前用户的问题

问题根源

你提交的Event对象未关联当前登录用户,导致数据库插入时user_id外键字段为空,无法完成数据插入。

修复步骤

修改@PostMapping方法,在保存事件前主动关联当前登录用户:

  1. 在store方法参数中添加@AuthenticationPrincipal UserDetails userDetails,获取当前登录用户信息;
  2. 通过用户邮箱查询对应的User实体;
  3. 将该User设置到表单提交的Event对象中;
  4. 执行保存操作。

修改后的控制器代码

@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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 03:55:35