Spring Security 如何在 Bean 中获取当前用户名(SecurityContext)信息?

我在项目中用了 Spring Security 和 Spring MVC ,我想知道当前登录用户的用户名。

我用了下面的这种实现,这有啥问题没?

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

我不喜欢在 Controller 中调用静态方法,这有悖于 Spring 的初衷。有没有一种方法可以配置应用,能将当前的 SecurityContext 或当前的 Authentication 注入到 Bean 方法中呢?

可以直接在方法中注入 Principal 对象:

 @RequestMapping(method = RequestMethod.GET)   
 public ModelAndView showResults(final HttpServletRequest request, Principal principal) {

     final String currentUser = principal.getName();

 }