@AuthenticationPrincipal
Spring Security(인증과 권한 검사처리 기능을 제공하는 프레임워크 )에서 제공하는 어노테이션으로, 현재 인증된 사용자의 정보를 주입받을 때 사용됩니다. @AuthenticationPrincipal 어노테이션은 현재 인증된 사용자의 정보를 가져오기 위해 사용되며, 주로 컨트롤러의 메서드 매개변수에 적용됩니다.
사용자 정보 주입
@AuthenticationPrincipal 어노테이션을 사용하여 UserDetailsService에서 반환한 UserDetails 객체를 주입받아 사용합니다. 따라서 현재 인증된 사용자의 정보를 주입받을 받아 사용자의 ID나 정보를 가져옵니다.
// Todo 작성
@PostMapping("/todo")
public ResponseEntity<TodoResponseDto> postTodo(@RequestBody TodoRequestDto requestDto, @AuthenticationPrincipal UserDetailsImpl userDetails) {
return ResponseEntity.ok(todoService.postTodo(requestDto, userDetails.getUser()));
}
<코드>
UserDetailsImpl
public class UserDetailsImpl implements UserDetails {
private final User user;
public UserDetailsImpl(User user) {
this.user = user;
}
public User getUser() {
return user;
}
@Override
public String getPassword() {
return user.getPassword();
}
@Override
public String getUsername() {
return user.getUsername();
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
UserRoleEnum role = user.getRole();
String authority = role.getAuthority();
SimpleGrantedAuthority simpleGrantedAuthority = new SimpleGrantedAuthority(authority);
Collection<GrantedAuthority> authorities = new ArrayList<>();
authorities.add(simpleGrantedAuthority);
return authorities;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
}
UserDetailsServiceImpl
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
private final UserRepository userRepository;
public UserDetailsServiceImpl(UserRepository userRepository) {
this.userRepository = userRepository;
}
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userRepository.findByUsername(username)
.orElseThrow(() -> new UsernameNotFoundException("Not Found " + username));
return new UserDetailsImpl(user);
}
}
'Spring' 카테고리의 다른 글
| Spring Day 14 : SQL 제약조건 (0) | 2024.02.07 |
|---|---|
| Spring Day 13 : 회원의 상태 변경(isChecked()) (0) | 2024.02.06 |
| Spring Day 11 : 로그인 성공 시 메세지와 StatusCode (0) | 2024.02.02 |
| Spring Day 10 : 인증과 인가 (1) | 2024.02.01 |
| Spring Day 9 : JPA Auditing (0) | 2024.01.30 |