使用Spring Security时,获取bean中当前用户名(即SecurityContext)

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

我有一个使用Spring Security的Spring MVC Web应用程序。我想知道当前登录用户的用户名。我正在使用下面给出的代码段。这是接受的方式吗?

我不喜欢在这个控制器中调用静态方法 - 这违背了Spring的全部目的,恕我直言。有没有办法配置应用程序以注入当前的SecurityContext或当前的身份验证?

  @RequestMapping(method = RequestMethod.GET)
  public ModelAndView showResults(final HttpServletRequest request...) {
    final String currentUser = SecurityContextHolder.getContext().getAuthentication().getName();
    ...
  }


30秒到达战场
浏览 3040回答 3
3回答

慕少森

如果您使用的是Spring 3,最简单的方法是: @RequestMapping(method = RequestMethod.GET)     public ModelAndView showResults(final HttpServletRequest request, Principal principal) {      final String currentUser = principal.getName();  }

慕尼黑8549860

如果您使用的是Spring Security ver> = 3.2,则可以使用@AuthenticationPrincipal注释:@RequestMapping(method = RequestMethod.GET)public ModelAndView showResults(@AuthenticationPrincipal CustomUser currentUser, HttpServletRequest request) {     String currentUsername = currentUser.getUsername();     // ...}这CustomUser是一个自定义对象,它实现UserDetails了自定义返回的对象UserDetailsService。可以在Spring Security参考文档的@AuthenticationPrincipal章节中找到更多信息。

qq_笑_17

Principal在控制器方法中定义为依赖项,spring将在调用时在方法中注入当前经过身份验证的用户。
打开App,查看更多内容
随时随地看视频慕课网APP