Java 使用Spring Security时获取当前登录的用户名
这是一款使用Spring security、Spring MVC、, 现在 当应用程序启动时,我需要以某种方式将当前登录的用户初始化到控制器中 问题是:Java 使用Spring Security时获取当前登录的用户名,java,spring,spring-boot,spring-mvc,spring-security,Java,Spring,Spring Boot,Spring Mvc,Spring Security,这是一款使用Spring security、Spring MVC、, 现在 当应用程序启动时,我需要以某种方式将当前登录的用户初始化到控制器中 问题是: 如果我试图通过SecurityContextHolder获取当前用户,这是不可能的,因为spring似乎在安全之前初始化控制器,所以我无法在控制器中获取它 我有什么遗漏吗?在当前登录用户登录后获取其身份的另一种方法?您需要的是@AuthenticationPrincipal。 您可以将其注入控制器方法,如下所示: @GetMapping("/"
我有什么遗漏吗?在当前登录用户登录后获取其身份的另一种方法?您需要的是
@AuthenticationPrincipal
。
您可以将其注入控制器方法,如下所示:
@GetMapping("/")
public void get(@AuthinticationPrincipal User user){ ... }
这是
或者,您可以创建自己的注释和自定义参数解析器,并注入任何您想要的内容。解决方案1:Principal
解决方案2:身份验证
解决方案3:SecurityContextHolder
登录后调用的控制器方法的request.getUserPrincipal().getName()如何?谢谢,工作得很好!正是我想要的。
@RequestMapping(value = {"/", ""})
public String start(Principal principal, Model model) {
String currentUser = principal.getName();
return currentUser;
}
@RequestMapping(value = {"/", ""})
public String currentUserName(Authentication authentication) {
return authentication.getName();
}
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if (principal instanceof UserDetails) {
String username = ((UserDetails)principal).getUsername();
} else {
String username = principal.toString();
}