spring security如何检索用户名

可能重复:
使用Spring Security时,获取bean中当前用户名(即SecurityContext)信息的正确方法是什么?

我正在使用spring security,我想知道如何在我的控制器中检索当前登录的用户名。 我可以在某处存储与登录用户名相关联的用户ID吗? 目前我从Priciple对象获取用户名

public boolean populateUserName(ModelMap model, Principal principal) { if (principal != null) { String name = principal.getName(); model.addAttribute("username", name); System.out.println("userName - " + name); return true; } else { System.out.println("principal is null"); return false; } } 

我在每个控制器方法中获取此Principal对象。 我不知道这是否是获得它的最佳方式。 例如,这是代码

 @RequestMapping(value = "/secure/myitem.htm", method = RequestMethod.GET) public ModelAndView showItem(@RequestParam("listingId") String listingId, ModelMap model, Principal principal) { populateUserName(model, principal); } 

 SecurityContextHolder.getContext().getAuthentication().getName() 

此外,可能是重复: 使用Spring Security时,获取bean中当前用户名(即SecurityContext)信息的正确方法是什么?

如果您只需要用户名,那么使用Principal是有道理的,因为您与Spring Security API隔离开来。 您需要调用某些内容来访问用户名,因此您可能会将MVC基础结构传递给您。

如果您需要Spring Security提供的更多信息(而不仅仅是用户名),您可能需要查看此答案 。 你也会在网上其他地方找到这个。