如何使用spring security从db获取userID

时间:2017-11-03 14:16:17

标签: spring spring-mvc spring-security

我是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 ;.

有人可以向我解释一下吗?

1 个答案:

答案 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
}