【发布时间】:2023-03-11 03:22:01
【问题描述】:
我有一个 User 表和一个 UserInfo 表来保存用户的个人信息。我要做的是在登录后添加个人信息。具有 userId 列的表之间存在 OneToOne 关系,因此我将其定义如下:
UserInfo 类:
public class UserInfo {
//...
@OneToOne
@JoinColumn(name="user_id")
private User user;
// ...
}
用户类:
public class User implements UserDetails {
// ...
@OneToOne(mappedBy="user", cascade = CascadeType.ALL, fetch=FetchType.LAZY,optional=true)
private UserInfo userInfo;
...
}
登录后,我想为当前用户添加一些用户信息到数据库中。但我不知道如何在控制器中保存用户信息?我应该像下面那样保存 User 对象吗?我已经搜索过了,有一种方法可以获取当前用户的信息:
(User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
但是当我尝试在控制器中使用它时,它只会返回 null。如何为已登录的用户进行此类操作(添加个人信息)?
@RequestMapping(value = "/show", method = RequestMethod.POST)
public ModelAndView newUser(ModelMap model, Principal principal) {
ModelAndView result = new ModelAndView("home");
User user = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
UserInfo userinfo = new UserInfo();
userinfo.setPlacesVisit(userinfo.getPlacesVisit());
user.setUserInfo(userinfo);
userService.save(user);
String message = "Userinfo was successfully added.";
result.addObject("message", message);
return result;
}
【问题讨论】:
-
你在使用 Spring Security 吗?
-
是的,我正在使用 Spring Security。
标签: java mysql spring hibernate jsp