我是Java Spring的新手。我正在使用Spring Boot创建一个项目,我需要获取当前用户的userID。据我所知,我们可以使用安全上下文持有者获取当前登录用户,这是我的代码:
@RequestMapping(value="/posts/create", method=RequestMethod.GET)
public String addPost(String username, Model model){
Authentication auth= SecurityContextHolder.getContext().getAuthentication();
String name=auth.getName();
UserDetails userDetial= (UserDetails) auth.getDetails();
Users user= uRepo.findByUsername(userDetial.getUsername());
Long id= user.getId();
model.addAttribute("add", new Post());
model.addAttribute("userId", id);
model.addAttribute("authorName", name);
return "posts/create";
}
当我收到错误时,我不知道我的代码有什么问题:" org.springframework.security.web.authentication.WebAuthenticationDetails无法转换为org.springframework.security.core.userdetails。的UserDetails&#34 ;.
有人可以向我解释一下吗?
答案 0 :(得分:0)
错误消息似乎很清楚,你不能这样做:
UserDetails userDetial= (UserDetails) auth.getDetails();
但你可以这样做:
UserDetails userDetails = (UserDetails)auth.getPrincipal();
或者简而言之,您也可以直接注入java.security.Principal
界面,如下所示
public String addPost(String username, Model model, Principal principal){
String userUsername = principal.getName(); //gives you the username of the connected user
}