首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从Spring MVC控制器的安全上下文中获取UserDetails对象

从Spring MVC控制器的安全上下文中获取UserDetails对象
EN

Stack Overflow用户
提问于 2011-05-28 21:41:32
回答 5查看 118K关注 0票数 66

我使用的是Spring Security 3和Spring MVC 3.05。

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

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

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-05-28 22:04:17

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

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

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

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

Stack Overflow用户

发布于 2014-04-03 03:43:23

让Spring3注入来解决这个问题。

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

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

 }
票数 33
EN

Stack Overflow用户

发布于 2013-02-08 19:13:02

如果您使用的是spring security,则可以通过以下方式获取当前登录的用户

Authentication auth = SecurityContextHolder.getContext().getAuthentication();
     String name = auth.getName(); //get logged in username
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6161985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档