Retrieve User Information in Spring Security
전제 조건으로
security
를 이용한 인증을 모두 완료 후 인증된 정보를 가져오는 방법입니다.
단순한 정보 호출 방법
아래와 같이 SecurityContextHolder
를 통해서 정보를 가져올 수 있습니다.
인증된 정보를 가져오는 단순한 방법
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String currentPrincipalName = authentication.getName();
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (!(authentication instanceof AnonymousAuthenticationToken)) {
String currentUserName = authentication.getName();
return currentUserName;
}
인증된 객체를 가져오는 방법
UserDetails userDetails = (UserDetails) authentication.getPrincipal();
System.out.println("User has authorities: " + userDetails.getAuthorities());
Controller에서 인증된 객체를 가져오는 방법
@Controller
public class GetUserWithPrincipalController {
@RequestMapping(value = "/username", method = RequestMethod.GET)
@ResponseBody
public String currentUserName(Principal principal) {
return principal.getName();
}
}
@Controller
public class GetUserWithAuthenticationController {
@RequestMapping(value = "/username", method = RequestMethod.GET)
@ResponseBody
public String currentUserName(Authentication authentication) {
return authentication.getName();
}
}
Request 객체에서 직접 호출 하는 방법
@Controller
public class GetUserWithHTTPServletRequestController {
@RequestMapping(value = "/username", method = RequestMethod.GET)
@ResponseBody
public String currentUserNameSimple(HttpServletRequest request) {
Principal principal = request.getUserPrincipal();
return principal.getName();
}
}
마지막으로 제가 가장 선호하는 annotation 기반으로 가져오는 방법
@RestController
public class GetUserWithAuthenticationPrincipalAnnotationController {
@GetMapping("/user")
public String getUser(@AuthenticationPrincipal UserDetails userDetails) {
return "User Details: " + userDetails.getUsername();
}
}
여러 방식으로 필요할때, 현재 인증된 정보를 가져와서 사용하면 됩니다