이번에는 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();
}
}
'개발&프로그래밍' 카테고리의 다른 글
[JAVA] Java의 String Empty 와 Blank 체크하기 (0) | 2022.03.18 |
---|---|
[JAVA] Java의 ArrayList를 변경불가능(Immutable)로 생성하는 방법 (0) | 2022.03.17 |
[JUnit] JUnit5 기본 설정 및 어노테이션 (0) | 2022.03.16 |
[JAVA] Java8 Stream API - findFirst() 와 findAny() (0) | 2022.03.15 |
[Kotlin] 코틀린 클래스와 프로퍼티 (0) | 2022.03.15 |
댓글