Skip to content

Commit 65b74b5

Browse files
imjuyongpclaude
andcommitted
🐛Fix: 게시글 생성 시 user 저장 및 jjwt 0.13.0 API 호환성 수정
- 게시글 생성 시 user 정보가 저장되지 않던 문제 수정 - jjwt 0.13.0 API에 맞게 JwtProvider 수정 (deprecated API 제거) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 99acc52 commit 65b74b5

File tree

5 files changed

+20
-14
lines changed

5 files changed

+20
-14
lines changed

src/main/java/com/be/sportizebe/domain/post/controller/PostController.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,10 @@ public class PostController {
3131
public ResponseEntity<BaseResponse<PostResponse>> createPost(
3232
@Parameter(description = "게시판 종류 (SOCCER, BASKETBALL, FREE)") @PathVariable PostProperty property,
3333
@RequestBody @Valid CreatePostRequest request) {
34-
PostResponse response = postService.createPost(property, request);
34+
// TODO: 인증 로직 개발 후 @AuthenticationPrincipal User user로 변경
35+
User user = userRepository.findById(1L)
36+
.orElseThrow(() -> new RuntimeException("테스트 유저가 없습니다. users 테이블에 id=1인 유저를 추가해주세요."));
37+
PostResponse response = postService.createPost(property, request, user);
3538
return ResponseEntity.status(HttpStatus.CREATED)
3639
.body(BaseResponse.success("게시글 생성 성공", response));
3740
}

src/main/java/com/be/sportizebe/domain/post/dto/request/CreatePostRequest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.be.sportizebe.domain.post.entity.Post;
44
import com.be.sportizebe.domain.post.entity.PostProperty;
5+
import com.be.sportizebe.domain.user.entity.User;
56
import jakarta.validation.constraints.NotBlank;
67
import lombok.Builder;
78

@@ -12,13 +13,14 @@ public record CreatePostRequest(
1213
boolean isAnonymous,
1314
String imgUrl) {
1415

15-
public Post toEntity(PostProperty property) { // DTO -> Entity 변환
16+
public Post toEntity(PostProperty property, User user) { // DTO -> Entity 변환
1617
return Post.builder()
1718
.title(title)
1819
.content(content)
1920
.isAnonymous(isAnonymous)
2021
.imgUrl(imgUrl)
2122
.property(property)
23+
.user(user)
2224
.build();
2325
}
2426
}

src/main/java/com/be/sportizebe/domain/post/service/PostService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import com.be.sportizebe.domain.user.entity.User;
88

99
public interface PostService {
10-
PostResponse createPost(PostProperty property, CreatePostRequest request); // 게시글 생성
10+
PostResponse createPost(PostProperty property, CreatePostRequest request, User user); // 게시글 생성
1111

1212
PostResponse updatePost(Long postId, UpdatePostRequest request, User user); // 게시글 수정
1313

src/main/java/com/be/sportizebe/domain/post/service/PostServiceImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ public class PostServiceImpl implements PostService {
2323

2424
@Override
2525
@Transactional
26-
public PostResponse createPost(PostProperty property, CreatePostRequest request) {
27-
Post post = request.toEntity(property); // 요청 dto 데이터를 entity로 변환
26+
public PostResponse createPost(PostProperty property, CreatePostRequest request, User user) {
27+
Post post = request.toEntity(property, user); // 요청 dto 데이터를 entity로 변환
2828

2929
Post savedPost = postRepository.save(post); // db에 저장
3030

src/main/java/com/be/sportizebe/global/jwt/JwtProvider.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@
44
import com.be.sportizebe.global.exception.CustomException;
55
import io.jsonwebtoken.*;
66
import io.jsonwebtoken.security.Keys;
7+
import io.jsonwebtoken.security.SecurityException;
78
import jakarta.annotation.PostConstruct;
89
import lombok.Getter;
910
import lombok.extern.slf4j.Slf4j;
1011
import org.springframework.beans.factory.annotation.Value;
1112
import org.springframework.stereotype.Component;
1213

13-
import java.security.Key;
14+
import javax.crypto.SecretKey;
1415
import java.util.Base64;
1516
import java.util.Date;
1617
import java.util.UUID;
@@ -19,7 +20,7 @@
1920
@Component
2021
public class JwtProvider {
2122

22-
private Key key;
23+
private SecretKey key;
2324
private final String secretKey;
2425
@Getter private final long accessTokenExpireTime;
2526
@Getter private final long refreshTokenExpireTime;
@@ -50,11 +51,11 @@ public String createRefreshToken(Long userId) {
5051
private String createToken(Long userId, long expireTimeMillis) {
5152
Date now = new Date();
5253
return Jwts.builder()
53-
.setSubject(String.valueOf(userId))
54-
.setId(UUID.randomUUID().toString())
55-
.setIssuedAt(now)
56-
.setExpiration(new Date(now.getTime() + expireTimeMillis))
57-
.signWith(key, SignatureAlgorithm.HS256)
54+
.subject(String.valueOf(userId))
55+
.id(UUID.randomUUID().toString())
56+
.issuedAt(now)
57+
.expiration(new Date(now.getTime() + expireTimeMillis))
58+
.signWith(key, Jwts.SIG.HS256)
5859
.compact();
5960
}
6061

@@ -68,7 +69,7 @@ public boolean validateToken(String token) {
6869
throw new CustomException(AuthErrorCode.UNSUPPORTED_TOKEN);
6970
} catch (MalformedJwtException e) {
7071
throw new CustomException(AuthErrorCode.MALFORMED_JWT_TOKEN);
71-
} catch (io.jsonwebtoken.SignatureException e) {
72+
} catch (SecurityException e) {
7273
throw new CustomException(AuthErrorCode.INVALID_SIGNATURE);
7374
} catch (IllegalArgumentException e) {
7475
throw new CustomException(AuthErrorCode.ILLEGAL_ARGUMENT);
@@ -86,6 +87,6 @@ public String extractTokenId(String token) {
8687
}
8788

8889
private Claims parseClaims(String token) {
89-
return Jwts.parserBuilder().setSigningKey(key).build().parseClaimsJws(token).getBody();
90+
return Jwts.parser().verifyWith(key).build().parseSignedClaims(token).getPayload();
9091
}
9192
}

0 commit comments

Comments
 (0)