How to find out the currently logged-in user in Spring Boot?
Since Spring Security 3.2 you can get currently logged in user (your implementation of UserDetails
) by adding a parameter inside your controller method:
import org.springframework.security.web.bind.annotation.AuthenticationPrincipal;
@RequestMapping("/resource")
public Map<String, Object> home(@AuthenticationPrincipal User user) {
..
}
Replace User
with the name of your class which implements UserDetails
interface.
Edit:
Since Spring Security 4.0 annotation was moved to a different package:
import org.springframework.security.core.annotation.AuthenticationPrincipal;
Addendum:
This will work even in WebFlux
reactive environment versus the SecurityContextHolder.getContext().getAuthentication()
which won't work because of paradigm shift from thread per request model to multiple requests per thread.
As per request:
Spring Boot which uses Spring Security internally provides a SecurityContextHolder class which allows the lookup of the currently authenticated user via:
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
The authentication instance now provides the following methods:
- Get the username of the logged in user:
getPrincipal()
- Get the password of the authenticated user:
getCredentials()
- Get the assigned roles of the authenticated user:
getAuthorities()
- Get further details of the authenticated user:
getDetails()