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 对象
我刚刚意识到,当第一次访问我的主页时,用户没有经过身份验证,因此无论如何在 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)
| 归档时间: |
|
| 查看次数: |
920 次 |
| 最近记录: |