Skip to content

Conversation

@yewonahn
Copy link
Collaborator

@yewonahn yewonahn commented Nov 30, 2024

📍 PR 타입 (하나 이상 선택)

  • 기능 추가
  • 버그 수정
  • 의존성, 환경 변수, 빌드 관련 코드 업데이트
  • 기타 사소한 수정

❗️ 관련 이슈 링크

Close #399

📌 개요

  • ♻️ Refactor: HandlerMethodArgumentResolver 구현 #397 : 특정 모임에서의 요청이 들어왔을 때, 해당 유저가 해당 모임의 멤버인지 검증한 후, UserMoim 객체를 추출하는 커스텀 어노테이션 resolver인 AuthUserMoimArgumentResolver, AuthUserMoimAdminArgumentResolver, AuthUserMoimOwnerArgumentResolver에서 UserMoim을 구현했습니다
  • Validator들 중에서, 유저의 userMoimId, moimRole이 필요한 경우가 있는데, ArgumentResolver를 통해서 추출한 UserMoim 객체와 검증 어노테이션 Validator 로직을 연결하는 방법을 생각하던 중 SecurityContextHolder에 이를 세팅하도록 시도해보았습니다
  • spring의 처리 순서 상, ArgumentResolver가 먼저 실행되고 Validator가 실행됩니다
  1. Argument Resolver : controller 메서드 호출하기 직전에 파라미터 값을 생성해 전달하므로 validator가 실행되기 전에 항상 먼저 실행됩니다
  2. Validator : 커스텀 어노테이션이 붙어 있는 필드는, ArgumentResolver가 필요한 파라미터 값을 설정한 후에 실행됩니다
  • 따라서 이를 이용하여, 각 ArgumentResolver에서 UserMoim 객체를 추출 후, 이후 검증 어노테이션 로직에서 userMoimId와 moimRole를 쓸 수 있도록 MoimAuthentication을 구현했습니다
  1. AuthUserMoimArgumentResolver에서 UserMoim 추출 후, SecurityContextHolder에 커스텀 모임 authentication인 MoimAuthentication을 set하는 로직 추가 (SecurityContextHolder.getContext().setAuthentication()으로 MoimAuthentication을 set)
  2. 검증 어노테이션 로직에서 userMoimId, userRole 사용 가능 (SecurityContextHolder.getContext().getAuthentication())

🔁 변경 사항

  • MoimAuthentication 구현
  • AuthUserMoimArgumentResolver에 적용
  • AuthUserMoimAdminArgumentResolver에 적용
  • AuthUserMoimOwnerArgumentResolver에 적용

📸 스크린샷

👀 기타 더 이야기해볼 점

  • contoller에서 @AuthUserMoim, @AuthUserMoimAdmin, @AuthUserMoimOwner를 적용했을 때, 해당 API 로직에 커스텀 검증 어노테이션을 적용한 경우, 해당 어노테이션 Validator 로직에서 SecurityContextHolder.getContext().getAuthentication()을 통해 가져온 moimAuhentication을 통해 moimId, moimRole을 가져와서 검증 로직에서 사용하도록 기존 Validator 로직들에 적용할 수 있습니다

✅ 체크 리스트

  • PR 템플릿에 맞추어 작성했어요.
  • 변경 내용에 대한 테스트를 진행했어요.
  • 프로그램이 정상적으로 동작해요.
  • PR에 적절한 라벨을 선택했어요.
  • 불필요한 코드는 삭제했어요.

- MoimAuthentication 구현
- UserMoimArgumentResolver에서 SecurityContextHolder에 MoimAuthentication을 set하는 로직 추가
@yewonahn yewonahn added the ✨ feature Introduce new features label Nov 30, 2024
@yewonahn yewonahn self-assigned this Nov 30, 2024
@dydals3440 dydals3440 self-requested a review November 30, 2024 14:42
@yewonahn yewonahn merged commit 31f32b4 into develop Dec 1, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ feature Introduce new features

Projects

None yet

Development

Successfully merging this pull request may close these issues.

✨ [Feat] MoimAuthentication 구현

3 participants