• Home
  • About
    • lahuman photo

      lahuman

      열심히 사는 아저씨

    • Learn More
    • Facebook
    • LinkedIn
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

spring security에서 로그인 된 사용자 정보 가져오는 몇가지 방법

07 Feb 2024

Reading time ~1 minute

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

여러 방식으로 필요할때, 현재 인증된 정보를 가져와서 사용하면 됩니다

참고 자료

  • Retrieve User Information in Spring Security


springsecurity Share Tweet +1