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