Controller 에서 JWT에 저장된 유저 정보를 가져온다. JWT에는 유저의 Email정보가 들어있다.
@GetMapping("/{userId}")
public ResponseEntity<Page<AlarmResponseDto>> selectAlarm(@PathVariable(name = "userId") Long userId, @AuthenticationPrincipal UserDetails userDetails, Pageable pageable){
Page<AlarmResponseDto> alarmResponseDtoList = alarmService.selectAlarmByUserId(userId,userDetails,pageable);
return ResponseEntity.ok().body(alarmResponseDtoList);
}
파라미터로 @AuthenticationPrincipal UserDetails userDetails 을 적어주면 주입됨
메서드로 넘어온 userDetails 파라미터를 넘기고
public Page<AlarmResponseDto> selectAlarmByUserId(Long userId, UserDetails userDetails , Pageable pageable){
String clientEmail = userDetails.getUsername();
User findUser = userRepository.findById(userId).orElseThrow(
() -> new EmptyResultDataAccessException("존재하지 않는 User입니다.", 1));
if (!clientEmail.equals(findUser.getEmail())){
throw new AccessException("접근 권한이 없습니다.");
}
userDetail.getUsername() 메서드로 JWT에 있는 userEmail로 인가를 검증하면 된다.
만약에 접근하려는 정보랑 로그인한 유저랑 다르면 AccessException을 던지면 된다.