일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 추후정리
- 메소드명
- Query
- appspec.yml
- AuthenticationEntryPoint
- 커밋메세지수정
- ubuntu
- 예약
- 참조키
- WeNews
- docker명령어
- 포트
- 네이티브쿼리
- application.yml
- querydsl
- 테스트메소드
- 검색
- subquery
- EC2
- appspec
- 메세지수정
- foreignkey
- 테스트
- MySQL
- 외부키
- 2 > /dev/null
- 서브쿼리
- ㅔㄴ션
- 적용우선순위
- 컨테이너실행
Archives
- Today
- Total
제뉴어리의 모든것
[Spring Security] 현재 로그인한 사용자 정보 가져오기 본문
Spring Security 에서 현재 인증된(로그인한) 사용자의 정보를 가져오는 방법 에 대해 살펴볼 것 입니다. 스프링의 다양한 메카니즘을 통해 현재 로그인 중인 사용자의 정보를 가져올 수 있는데, 대표적인 몇 가지를 살펴보겠습니다.
1. Bean 에서 사용자 정보 얻기
가장 간단한 방법은 전역에 선언된 SecurityContextHolder을 이용하여 가져오는 방법입니다.
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
UserDetails userDetails = (UserDetails)principal;
String username = principal.getUsername();
String password = principal.getPassword();
2. Controller 에서 사용자 정보 얻기
@Controller로 선언된 bean 객체에서는 메서드 인자로 Principal 객체에 직접 접근할 수 있는 추가적인 옵션이 있습니다.
@Controller
public class SecurityController
{
@GetMapping("/username")
@ResponseBody
public String currentUserName(Principal principal)
{
return principal.getName();
}
}
principal 객체 뿐만 아니라 authentication 토큰 또한 사용할 수 있습니다.
@Controller
public class SecurityController
{
@GetMapping("/username")
@ResponseBody
public String currentUserName(Authentication authentication)
{
UserDetails userDetails = (UserDetails) authentication.getPrincipal();
return userDetails.getUsername();
}
}
3. @AuthenticationPrincipal
Spring Security 3.2 부터는 annotation을 이용하여 현재 로그인한 사용자 객체를 인자에 주입할 수 있습니다.
만약 UserDetails 를 구현한 CustomUser 클래스가 있고, UserDetailsService 구현체에서 CustomUser 객체를 반환한다고 가정합시다. (가장 흔한 케이스)
@Data
public class CustomUser implements UserDetails
{ // ... }
@Service
public class UserSerivce implements UserDetailsService
{
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException
{
CustomUser customUser = null; // ... DB 등을 통해 사용자 정보를 셋팅
return customUser;
}
}
다음과 같이 @AuthenticationPrincipal를 이용하여 CustomUser 객체를 인자에 넘겨줄 수 있습니다.
@Controller
public class SecurityController
{
@GetMapping("/messages/inbox")
public ModelAndView currentUserName(@AuthenticationPrincipal CustomUser customUser)
{
String username = customUser.getUsername();
// .. find messages for this user and return them ...
}
}
'Spring Boot > Spring Security' 카테고리의 다른 글
Filter 등록시 순서 유의 사항 (0) | 2022.09.27 |
---|---|
Spring Security와 Thymeleaf 기능을 사용하는 HTML 에서 사용시 주의사항 (1) | 2022.09.23 |
Spring Security 적용시 주의사항.. (0) | 2021.04.08 |
spring security 중복 로그인 방지 (0) | 2021.03.30 |
html 태그에 sec 속성 넣어서 인증 (Authenticate) 여부에 따라 출력하기 (0) | 2021.02.27 |