spring security之获取当前用户信息

spring security中获取当前用户的认证信息的几种方式

Posted by yishuifengxiao on 2019-10-15

1 通过 SecurityContextHolder 获取

SecurityContextHolder内部存储了当前与应用程序交互的主体的详细信息。 Spring Security 使用Authentication对象来表示此信息。 通常不需要自己创建Authentication对象,但是由于经常需要查询Authentication对象是相当普遍的。 可以在应用程序中的任何位置使用以下代码块来获取当前经过身份验证的用户的名称,例如:

1
2
3
4
5
6
7
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();

if (principal instanceof UserDetails) {
String username = ((UserDetails)principal).getUsername();
} else {
String username = principal.toString();
}

调用getContext()返回的对象是SecurityContext接口的一个实例。 这是保存在线程本地存储中的对象。 Spring Security 中的大多数身份验证机制都将UserDetails实例返回为主体。

2 通过 Authentication 获取

1
2
3
public Object getCurrentUser(Authentication authentication){
return authentication;
}

3 通过@AuthenticationPrincipal 获取

1
2
3
public Object getCurrentUser(@AuthenticationPrincipal UserDetails user){
return user;
}

4 通过 Principal 获取

1
2
3
public Object getCurrentUser(Principal principal){
return authentication;
}