Skip to content

Commit

Permalink
회원 정보 조회 로직 수정 (#130)
Browse files Browse the repository at this point in the history
* refactor: merge

* feat: 토큰 생성할 때 grantType 부여

* Todo: jwt 토큰을 추출하는 공통 로직 추가 예정

* 게시글 작성 시 이미지 업로드 기능 구현 (#132)

* chore: config 업데이트

* refactor: 다중 업로드 기능 불필요하다고 결정됨으로써 해당 코드 제거

* chore: 기존에 작성된 FileService 클래스 제거

* refactor: 클래스 이름 수정 및 메서드 추출

* style: 불필요한 코드 제거

* refactor: FileDto 클래스에서 불필요한 코드 제거 및 필드 주입 수정

* refactor: JPEG의 확장자를 jpg에서 jpeg로 변경

* feat: 게시글 작성 시 이미지 엔티티와 매핑

* 발송된 숫자코드 검증 기능 구현 (#107)

* feat: 30분 유효시간 설정

* refactor: dto 이름 수정

* feat: 발송 코드가 일치하는지 검증 기능 구현

* feat: 이메일 검증에 필요한 dto 클래스 추가

* feat: 에러 코드 추가

* refactor: validator 분리 및 에러코드 추가

* feat: swagger 코드 추가

* refactor: 리뷰 내용 리팩토링

* fix: yml 파일 config 폴더 내부로 이동

* refactor: mail패키지를 global에서 module로 이동 및 의미를 더 명확하게 하기 위해 authmail로 이름 변경

* refactor: 메서드 camel case 형식에 맞게 수정

* refactor: 회원 정보에서 ip 제거 (#138)

* 엑세스 토큰 만료 시 리프레시 토큰으로 액세스 토큰 재발급 하는 기능 추가 (#124)

* feat: 유효한 자격증명을 제공하지 않을 때 401 에러 리턴하는 기능 구현

* feat: 유효한 권한이 존재하지 않는 경우 403 에러 리턴하는 기능 구현

* feat: 401, 403에러 exception handling

* refactor: 토큰 필드를 TokenDto를 생성하여 따로 분리

* feat: accessToken 만료시 refreshToken 재발급 하는 기능 구현

* feat: 에러 코드 추가

* refactor: yml 파일 config로 이동

* refactor: JwtTokenProvider 에서 AuthenticationManager 삭제하여 순환 참조 에러 해결

* JwtTokenProvider 테스트 코드 작성 및 예외 테스트 코드 작성 (#128)

* fix: 오류 나는 코드 주석 처리 및 수정

* feat: payload 조회 기능 구현 및 authentication null 체크하는 메서드 추가

* fix: file 테스트 수정

* test: 토큰 테스트 코드 작성

* refacotor: 불필요한 코드 제거

* todo 주석 추가

* refactor:불필요한 코드 삭제

* fix: IllegalArgumentException 다른 amazon.awssdk import문 제거!!!!!

* refactor: merge

* Todo: jwt 토큰을 추출하는 공통 로직 추가 예정

---------

Co-authored-by: Hanjaemo <[email protected]>
  • Loading branch information
jschoi-96 and Hanjaemo authored Feb 28, 2024
1 parent 993975e commit a9ed222
Show file tree
Hide file tree
Showing 7 changed files with 33 additions and 12 deletions.
2 changes: 1 addition & 1 deletion src/main/java/balancetalk/global/exception/ErrorCode.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public enum ErrorCode {
ALREADY_LIKE_POST(CONFLICT, "이미 추천을 누른 게시글입니다."),

// 500
REDIS_CONNECTION_FAIL(INTERNAL_SERVER_ERROR, "Redis 연결에 실패했습니다.");
REDIS_CONNECTION_FAIL(INTERNAL_SERVER_ERROR, "Redis 연결에 실패했습니다."),


// 500
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,6 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha
}
chain.doFilter(request, response);
}


}
11 changes: 6 additions & 5 deletions src/main/java/balancetalk/global/jwt/JwtTokenProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -81,15 +81,16 @@ public Authentication getAuthentication(String token) {
// http 헤더로부터 bearer 토큰 가져옴
public String resolveToken(HttpServletRequest request) {
String bearerToken = request.getHeader("Authorization");
if (bearerToken != null && bearerToken.startsWith("bearer ")) {
if (bearerToken != null && bearerToken.startsWith("Bearer ")) {
return bearerToken.substring(7); // 실제 토큰만 추출
}
return null;
}
}


public String getPayload(String token) {
return tokenToJws(token).getBody().getSubject();
}
public String getPayload(String token) {
return tokenToJws(token).getBody().getSubject();
}

private Jws<Claims> tokenToJws(final String token) {
try {
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/balancetalk/global/jwt/JwtUtils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package balancetalk.global.jwt;

public class JwtUtils {

// TODO: static으로 메서드 선언 & member 조회 까지
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
import balancetalk.module.member.domain.Member;
import balancetalk.module.member.domain.MemberRepository;
import balancetalk.module.member.dto.*;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpHeaders;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
Expand Down Expand Up @@ -47,7 +49,7 @@ public LoginSuccessDto login(final LoginDto loginDto) {
Authentication authentication = authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(loginDto.getEmail(), loginDto.getPassword())
);
TokenDto tokenDto = new TokenDto(jwtTokenProvider.createAccessToken(authentication), jwtTokenProvider.createRefreshToken(authentication));
TokenDto tokenDto = new TokenDto("Bearer", jwtTokenProvider.createAccessToken(authentication), jwtTokenProvider.createRefreshToken(authentication));
return LoginSuccessDto.builder()
.email(member.getEmail())
.password(member.getPassword())
Expand All @@ -60,8 +62,10 @@ public LoginSuccessDto login(final LoginDto loginDto) {
}

@Transactional(readOnly = true)
public MemberResponseDto findById(Long id) {
Member member = memberRepository.findById(id)
public MemberResponseDto findById(HttpServletRequest request) {
String token = jwtTokenProvider.resolveToken(request);
String email = jwtTokenProvider.getPayload(token);
Member member = memberRepository.findByEmail(email)
.orElseThrow(() -> new BalanceTalkException(ErrorCode.NOT_FOUND_MEMBER));
return MemberResponseDto.fromEntity(member);
}
Expand Down
1 change: 1 addition & 0 deletions src/main/java/balancetalk/module/member/dto/TokenDto.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
@NoArgsConstructor
@AllArgsConstructor
public class TokenDto {
private String grantType;
private String accessToken;
private String refreshToken;
}
Original file line number Diff line number Diff line change
@@ -1,24 +1,26 @@
package balancetalk.module.member.presentation;

import balancetalk.global.jwt.JwtTokenProvider;
import balancetalk.module.member.application.MemberService;
import balancetalk.module.member.dto.*;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import java.util.List;

@Slf4j
@RestController
@RequiredArgsConstructor
@Tag(name = "member", description = "회원 API")
@RequestMapping("/members")
public class MemberController {

private final MemberService memberService;

@ResponseStatus(HttpStatus.CREATED)
@PostMapping("/join")
@Operation(summary = "회원 가입", description = "닉네임, 이메일, 비밀번호를 입력하여 회원 가입을 한다.")
Expand All @@ -36,13 +38,13 @@ public LoginSuccessDto login(@Valid @RequestBody LoginDto loginDto) {

@ResponseStatus(HttpStatus.OK)
@GetMapping("/{memberId}")
@Operation(summary = "단일 회원 조회", description = "해당 id값과 일치하는 회원 정보를 조회한다.")
@Operation(summary = "단일 회원 조회", description = "해당 jwt 토큰 값과 일치하는 회원 정보를 조회한다.")
public MemberResponseDto findMemberInfo(@PathVariable("memberId") Long memberId) {
return memberService.findById(memberId);
}

@ResponseStatus(HttpStatus.OK)
@GetMapping
@GetMapping("/findAll")
@Operation(summary = "전체 회원 조회", description = "모든 회원 정보를 조회한다.")
public List<MemberResponseDto> findAllMemberInfo() {
return memberService.findAll();
Expand Down Expand Up @@ -71,4 +73,9 @@ public String deleteMember(@PathVariable("memberId") Long memberId, @Valid @Requ
memberService.delete(memberId, loginDto);
return "회원 탈퇴가 정상적으로 처리되었습니다.";
}

@PostMapping("/test")
public String test() {
return "success";
}
}

0 comments on commit a9ed222

Please sign in to comment.