[9 주차] 정용환 / Chapter 9. Spring Security - JWT, OAuth 학습 목표 - #45
hwahwahwan wants to merge 7 commits into
Conversation
| // JWT / 일반 로그인용 | ||
| public AuthMember(Member member) { | ||
| this.member = member; | ||
| this.attributes = Map.of(); | ||
| } | ||
|
|
||
| // OAuth2 로그인용 | ||
| public AuthMember(Member member, Map<String, Object> attributes) { | ||
| this.member = member; | ||
| this.attributes = attributes; | ||
| } |
There was a problem hiding this comment.
저는 OAuthMember 를 따로 만들어서 관리했는데 AuthMember 안에 일반 로그인용과 OAuth 로그인용을 둘 다 만드신게 다른 것 같습니다.
|
|
||
| @Service | ||
| @RequiredArgsConstructor | ||
| public class CustomOAuthService implements OAuth2UserService<OAuth2UserRequest, OAuth2User> { |
There was a problem hiding this comment.
저는 커스텀 OAuth 서비스를 DefaultOAuth2UserService 를 확장해서 구현했는데 OAuth2UserService 인터페이스를 구현하신 점이 다른 것 같습니다.
| @Override | ||
| public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { | ||
| Member member = memberRepository.findByEmail(username) | ||
| .orElseThrow(() -> new MemberException(MemberErrorCode.USER_NOT_FOUND)); |
There was a problem hiding this comment.
워크북에도 나와있는 내용이지만, JPA의 OPtional이 제공하는 문법을 활용해서 DB 조회랑 예외 처리를 한 번에 깔끔하게 끝내서 가독성 좋게 잘 작성된 것 같습니다.,,!
| HttpServletResponse response, | ||
| AuthenticationException authException | ||
| ) throws IOException { | ||
| writeErrorResponse(response, GeneralErrorCode.UNAUTHORIZED); |
There was a problem hiding this comment.
현재 구조에서는 어떤 인증 예외가 발생해도 무조건 GeneralErrorCode.UNAUTHORIZED 하나로만 응답이 나가고 있습니다.
만약 나중에 프론트엔드에서 토큰 만료 에러를 받았을 때 자동으로 토큰 재발급 요청을 보내는 로직을 구현한다고 했을 때 에러코드가 분리되어야 할 것 같은데, 조금 더 분기 처리해 주는 구조로 하면 더 좋을 것 같다는 생각이 듭니다...!!!!!
|
토큰 검증 중복 파싱
토큰 검증 실패 사유 미구분
권한 정보를 저장하거나 생성하는 코드 자체가 없는 상태입니다.
// 예시 코드 요청 1건에 회원 조회가 2회 일어납니다.
해결법 |
🔗 Issue Number
📝 개요
9주차에 수정 내용 같이 넣다보니 변경점이 많습니다 9주차 미션 파일들입니다
global/security/jwt/JwtUtil.java
global/security/jwt/JwtAuthFilter.java
global/security/oauth/CustomOAuthService.java
global/security/oauth/OAuthSuccessHandler.java
build.gradle
src/main/resources/application.yaml
global/security/entity/AuthMember.java
global/config/SecurityConfig.java
global/config/SwaggerConfig.java
domain/member/exception/MemberErrorCode.java
domain/member/exception/MemberSuccessCode.java
domain/member/dto/MemberReqDTO.java
domain/member/dto/MemberResDTO.java
domain/member/converter/MemberConverter.java
domain/member/service/MemberService.java
domain/member/controller/MemberController.java
domain/mission/controller/MissionController.java
domain/review/controller/ReviewController.java
domain/member/enums/SnsType.java
🚀 주요 변경 사항
6주차 7주차 피드백 내용 반영해서 수정했습니다.
🖼️ 실행 결과 (Screenshots)
💬 고민 및 질문
✅ 실습 체크리스트
⚙️ 환경 및 컨벤션 체크 (Final Check)