Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在ModelAttribute方法中获取主体对象_Java_Spring_Spring Mvc_Spring Security - Fatal编程技术网

Java 如何在ModelAttribute方法中获取主体对象

Java 如何在ModelAttribute方法中获取主体对象,java,spring,spring-mvc,spring-security,Java,Spring,Spring Mvc,Spring Security,我试图加载一些基本的用户信息,这些信息应该可以用于每个HTTP请求。我读到我可以用@ControllerAdvice类和@ModelAttribute方法来实现这一点。例如: @ControllerAdvice public class DefaultController{ @ModelAttribute public void load(ModelMap model){ } } 但是,我在访问由Spring Security管理的主要对象时遇到问题。我尝试了以下方法:

我试图加载一些基本的用户信息,这些信息应该可以用于每个HTTP请求。我读到我可以用@ControllerAdvice类和@ModelAttribute方法来实现这一点。例如:

@ControllerAdvice
public class DefaultController{

  @ModelAttribute
  public void load(ModelMap model){


  }

}
但是,我在访问由Spring Security管理的主要对象时遇到问题。我尝试了以下方法:

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


  }


但这两种方法都不起作用。我得到了用户对象的空值。我想知道是否有人知道如何在@modeldattribute methods中获取主体对象。我刚刚意识到,当第一次访问我的主页时,用户没有经过身份验证,因此spring security中不会有用户对象

我只需要先检查对象是否为null,就像这样

@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
 }

}

您可以使用
org.springframework.security.core.context.SecurityContextHolder

@ModelAttribute
public void addUserToModel(Model model) {
    try {
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        String username = auth.getName();
        // do something
    } catch (Exception ex) {

    }
}
事实上,您可以在应用程序中的任何位置使用
SecurityContextHolder

@ModelAttribute
public void addUserToModel(Model model) {
    try {
        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        String username = auth.getName();
        // do something
    } catch (Exception ex) {

    }
}