1. 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 을 적어주면 주입됨

  2. 메서드로 넘어온 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을 던지면 된다.