본문 바로가기
개발&프로그래밍

[SpringSecurity] SpringSecurity에서 user detail 정보를 획득하기

by 재아군 2022. 3. 17.

이번에는 SpringSecurity에서 인증된 user detail 정보를 얻어오는 방법에 대해 알아봅니다.

 

 

Bean 안에서 인증된 User 획득하기

 

SecurityContextHolder의 context에서 인증된 정보에서의 User의 name을 획득하기

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String currentPrincipalName = authentication.getName();

 

혹은 아래처럼 인증된 타입에 따른 분기를 추가하는게 더 좋을수도 있겠죠?

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (!(authentication instanceof AnonymousAuthenticationToken)) {
	return authentication.getName();
}

 

 

Controller에서 인증된 User 획득하기

 

Principal을 통해 name을 획득하기

@Controller
public class SecurityController {
    @RequestMapping(value = "/username", method = RequestMethod.GET)
    @ResponseBody
    public String currentUserName(Principal principal) {
        return principal.getName();
    }
}

 

또는 인증 정보에서 name을 획득하기

@Controller
public class SecurityController {
    @RequestMapping(value = "/username", method = RequestMethod.GET)
    @ResponseBody
    public String currentUserName(Authentication authentication) {
        return authentication.getName();
    }
}

 

만약 인증된 user에게 부여된 권한을 알고 싶다면?

ㄴ 인증정보의 principal을 가져와서 UserDetails 인스턴스로 캐스팅을 한후, 부여된 권한들을 가져올 수 있습니다.

UserDetails userDetails = (UserDetails) authentication.getPrincipal();
System.out.println("authorities: " + userDetails.getAuthorities());

 

 

HTTP 요청에서 인증된 User 획득하기

@Controller
public class HTTPServletRequestController {
    @RequestMapping(value = "/username", method = RequestMethod.GET)
    @ResponseBody
    public String currentUserNameSimple(HttpServletRequest request) {
        Principal principal = request.getUserPrincipal();
        return principal.getName();
    }
}

 

댓글