Java 如何在ModelAttribute方法中获取主体对象
我试图加载一些基本的用户信息,这些信息应该可以用于每个HTTP请求。我读到我可以用@ControllerAdvice类和@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管理的主要对象时遇到问题。我尝试了以下方法:
@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) {
}
}