스프링부트 todolist 구축 (버전1)

날아올라돼지야·2024년 9월 11일

포스트맨을 통해 테스트

1. api 검증 테스트

403 Forbidden 이 나오니 정상 동작입니다.

2. 회원가입 성공

200 OK 응답으로 잘 성공했습니다.

응답에 따른 코드 호출 흐름

(1) UserController

    @PostMapping("/signup")
    public ResponseEntity<?> registerUser(@RequestBody User user) {
        userService.registerUser(user);
        return ResponseEntity.ok("User registered successfully");
    }

(2) UserService

  • 비밀번호 암호화
  • 비밀번호 암호화된 User 객체를 DB에 저장
    public User registerUser(User user) {
        user.setPassword(passwordEncoder.encode(user.getPassword()));
        return userRepository.save(user);
    }

(3) JPA를 통해 저장

3. 로그인

에러 발생함

Debug 시도
  • 코드 검증

  • 디버그 결과 여기까지 정상
    SecurityContextHolder.getContext().setAuthentication(authentication);

  • jwtTokenProvider.generateToken(authentication); 이 부분이 문제 있는듯

맞네, 확인해 보니 application.yml에
시크릿키에 - 문자가 포함되어 있음

이게 안되는줄은 몰랐네

그래서 시크릿 키 수정하고 다시함

secret: yoursecretkey

ㅎㅎㅎㅎ 수정했는데 또 안됌

많이 배우네

이유는 72 bits 인데 HS512 알고리즘에 적절치 않다는 듯.. 시크릿키를 바꿔야겠군

다시 수정
yoursecretkeyyoursecretkeyyoursecretkeyyoursecretkeyyoursecretkeyyoursecretkeyyoursecretkeyyoursecretkeyyoursecretkey

이번엔 되겠지?

두둥...

성공!!!

4. AccessToken으로 요청

그런데 또 오류네!?

기존 코드를

    @GetMapping
    public List<Todo> getUserTodos(Authentication authentication) {
        User user = (User) authentication.getPrincipal();
        return todoService.getTodosByUser(user.getId());
    }

아래와 같이 변경

    @GetMapping
    public List<Todo> getUserTodos(Authentication authentication) {
        UserDetailsImpl userDetails = (UserDetailsImpl) authentication.getPrincipal(); // UserDetailsImpl로 캐스팅
        Long userId = userDetails.getId(); // UserDetailsImpl에서 사용자 ID 추출
        return todoService.getTodosByUser(userId); // ID 기반으로 투두 리스트 가져오기
    }

이제 정상동작!

5. 등록 테스트

등록은 되는데

이렇게 계속 반복하여 연관관계에 있는 객체가 순환참조하고 있어.. 이러면 안되는데?

아! 방법은 DTO로 모든 걸 처리하자!!!

UserDetailsImpl와 Principal 객체는 뭔 차이야?

profile
무슨 생각하며 사니

0개의 댓글