从 Spring MVC 控制器中的安全上下文中获取用户详细信息对象

2022-08-31 14:55:01

我正在使用Spring Security 3和Spring MVC 3.05。

我想打印当前登录用户的用户名,如何在我的控制器中获取用户详细信息?

@RequestMapping(value="/index.html", method=RequestMethod.GET)
    public ModelAndView indexView(){
         UserDetails user = ?
                mv.addObject("username", user.getUsername());
        ModelAndView mv = new ModelAndView("index");
        return mv;
    }   

答案 1

如果您已经确定用户已登录(在您的示例中,如果受保护):/index.html

UserDetails userDetails =
 (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal();

要首先检查用户是否已登录,请检查当前是否不是 .AuthenticationAnonymousAuthenticationToken

Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (!(auth instanceof AnonymousAuthenticationToken)) {
        // userDetails = auth.getPrincipal()
}

答案 2

让春季3注射来解决这个问题。

多亏了tsunade21,最简单的方法是:

 @RequestMapping(method = RequestMethod.GET)   
 public ModelAndView anyMethodNameGoesHere(Principal principal) {
        final String loggedInUserName = principal.getName();

 }

推荐