如何在 ModelAttribute 方法中获取 Principal 对象

Sol*_*ace -1 java spring spring-mvc spring-security

我正在尝试加载一些基本的用户信息,这些信息应该可用于每个 HTTP 请求。我读到我可以使用带有 @ModelAttribute 方法的 @ControllerAdvice 类来做到这一点。例如:

@ControllerAdvice
public class DefaultController{

  @ModelAttribute
  public void load(ModelMap model){


  }

}
Run Code Online (Sandbox Code Playgroud)

但是,我无法访问由 Spring Security 管理的 Principal 对象。我尝试了以下方法:

  @ModelAttribute
  public void load(ModelMap model, @AuthenticationPrincipal CustomUser user){


  }
Run Code Online (Sandbox Code Playgroud)

  @ModelAttribute
  public void load(ModelMap model, Principal user){
  //Cast to CustomUser object

  }
Run Code Online (Sandbox Code Playgroud)

但是这两种方法都不起作用。我为用户对象获取空值。我想知道是否有人知道如何在 @ModelAttribute 方法中获取 Principal 对象

Sol*_*ace 5

我刚刚意识到,当第一次访问我的主页时,用户没有经过身份验证,因此无论如何在 Spring Security 中都不会有用户对象。

我只需要像这样先检查对象是否为空

@ModelAttribute
public void load(ModelMap model, @AuthenticationPrincipal CustomUser user){

 if(user != null){
    long userId = user.getId();
    //Query database with userId and add data to model
 }

}
Run Code Online (Sandbox Code Playgroud)