Skip to content

Commit b75b8e9

Browse files
authored
Merge pull request FITIFITBANnerit#22 from day024/main
refactor: 기존에 body로 jwt를 보내던걸 header로 전송
2 parents da172ca + 9438942 commit b75b8e9

File tree

20 files changed

+262
-97
lines changed

20 files changed

+262
-97
lines changed

backend-submodule

build.gradle

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,14 @@ dependencies {
3232

3333
implementation 'io.jsonwebtoken:jjwt:0.9.1'
3434
implementation 'io.jsonwebtoken:jjwt:0.12.6'
35-
implementation 'mysql:mysql-connector-java:8.0.33'
3635
implementation 'com.google.api-client:google-api-client:1.34.1'
3736
implementation 'com.google.http-client:google-http-client-gson:1.41.0'
3837
implementation 'com.google.http-client:google-http-client-jackson2:1.40.1'
3938
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
39+
implementation 'mysql:mysql-connector-java:8.0.33'
40+
implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'
41+
42+
implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'
4043

4144
compileOnly 'org.projectlombok:lombok'
4245
developmentOnly 'org.springframework.boot:spring-boot-devtools'

src/main/java/com/BANnerIt/server/api/Auth/controller/OAuthController.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,26 +16,25 @@
1616
@RestController
1717
@RequestMapping("/oauth")
1818
public class OAuthController {
19+
1920
private final OAuthService oAuthService;
2021

2122
public OAuthController(OAuthService oAuthService) {
2223
this.oAuthService = oAuthService;
2324
}
2425

2526
@PostMapping("/validate")
26-
public ResponseEntity<ApiResponse<?>> validateIdToken(@RequestBody Map<String, String> request) {
27+
public ResponseEntity<ApiResponse<UserData>> validateIdToken(@RequestBody Map<String, String> request) {
2728
String idToken = request.get("id_token");
28-
try {
29-
Map<String, Object> userDetails = oAuthService.authenticateUser(idToken);
3029

31-
String jwtToken = (String) userDetails.get("accessToken");
32-
UserData userData = (UserData) userDetails.get("userData");
30+
try {
31+
AutoLoginResponse loginResponse = oAuthService.authenticateUser(idToken);
3332

34-
if (jwtToken == null || userData == null) {
35-
throw new CustomException(ErrorCode.INTERNAL_SERVER_ERROR, "OAuth 인증 후 필요한 정보를 가져오지 못했습니다.");
36-
}
33+
return ResponseEntity
34+
.ok()
35+
.header("Authorization", "Bearer " + loginResponse.jwt())
36+
.body(ApiResponse.success(loginResponse.userData()));
3737

38-
return ResponseEntity.ok(ApiResponse.success(jwtToken, userData));
3938
} catch (IllegalArgumentException e) {
4039
throw new CustomException(ErrorCode.UNAUTHORIZED, "승인되지 않은 접근입니다.");
4140
} catch (Exception e) {
@@ -48,8 +47,9 @@ public ResponseEntity<ApiResponse<UserData>> refreshAccessToken(HttpServletReque
4847
final String accessToken = oAuthService.extractAccessTokenFromHeader(request);
4948
final AutoLoginResponse result = oAuthService.autoLogin(accessToken);
5049

51-
return ResponseEntity.ok(ApiResponse.success(result.jwt(), result.userData()));
50+
return ResponseEntity
51+
.ok()
52+
.header("Authorization", "Bearer " + result.jwt())
53+
.body(ApiResponse.success(result.userData()));
5254
}
53-
54-
55-
}
55+
}

src/main/java/com/BANnerIt/server/api/Auth/service/OAuthService.java

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public OAuthService(JwtTokenUtil jwtTokenUtil, MemberRepository memberRepository
3737
this.idTokenVerify=idTokenVerify;
3838
}
3939

40-
public Map<String, Object> authenticateUser(String idToken) throws GeneralSecurityException, IOException {
40+
public AutoLoginResponse authenticateUser(String idToken) throws GeneralSecurityException, IOException {
4141
GoogleIdToken.Payload payload = idTokenVerify.verifyIdToken(idToken);
4242
if (payload == null) {
4343
throw new CustomException(ErrorCode.UNAUTHORIZED, "유효하지 않은 ID 토큰입니다.");
@@ -55,14 +55,15 @@ public Map<String, Object> authenticateUser(String idToken) throws GeneralSecuri
5555

5656
refreshTokenRepository.save(new RefreshToken(member.getUserId(), refreshToken));
5757

58-
UserData userData = new UserData(name, email, pictureUrl);
58+
UserData userData = new UserData(
59+
member.getUserId(),
60+
member.getRole(),
61+
member.getName(),
62+
member.getEmail(),
63+
member.getUserProfile()
64+
);
5965

60-
Map<String, Object> response = new HashMap<>();
61-
response.put("accessToken", accessToken);
62-
response.put("refreshToken", refreshToken);
63-
response.put("userData", userData);
64-
65-
return response;
66+
return new AutoLoginResponse(accessToken, userData);
6667
}
6768

6869
public AutoLoginResponse autoLogin(String accessToken) {
@@ -95,17 +96,31 @@ public AutoLoginResponse refreshAccessToken(Long userId) {
9596
.orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND_MEMBER, "사용자를 찾을 수 없습니다."));
9697

9798
String newAccessToken = jwtTokenUtil.generateAccessToken(userId);
98-
return new AutoLoginResponse(newAccessToken,
99-
new UserData(member.getName(), member.getEmail(), member.getUserProfile()));
10099

100+
UserData userData = new UserData(
101+
member.getUserId(),
102+
member.getRole(),
103+
member.getName(),
104+
member.getEmail(),
105+
member.getUserProfile()
106+
);
107+
108+
return new AutoLoginResponse(newAccessToken, userData);
101109
}
102110

111+
103112
private AutoLoginResponse getUserDataFromToken(String token) {
104113
Long userId = jwtTokenUtil.extractUserId(token);
105114
Member member = memberRepository.findById(userId)
106115
.orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND_MEMBER, "사용자를 찾을 수 없습니다."));
107116

108-
UserData userData = new UserData(member.getName(), member.getEmail(), member.getUserProfile());
117+
UserData userData = new UserData(
118+
member.getUserId(),
119+
member.getRole(),
120+
member.getName(),
121+
member.getEmail(),
122+
member.getUserProfile()
123+
);
109124

110125
return new AutoLoginResponse(token, userData);
111126
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.BANnerIt.server.api.s3.controller;
2+
3+
import com.BANnerIt.server.api.s3.dto.PresignedUrlRequest;
4+
import com.BANnerIt.server.api.s3.dto.PresignedUrlResponse;
5+
import com.BANnerIt.server.api.s3.service.S3Service;
6+
import lombok.RequiredArgsConstructor;
7+
import org.springframework.web.bind.annotation.*;
8+
9+
import java.util.List;
10+
11+
@RestController
12+
@RequiredArgsConstructor
13+
@RequestMapping("/presigned-urls")
14+
public class S3Controller {
15+
private final S3Service s3Service;
16+
17+
@PostMapping
18+
public PresignedUrlResponse createPresignedUrls(
19+
@RequestBody PresignedUrlRequest request,
20+
@RequestParam(defaultValue = "report") String folder
21+
) {
22+
return s3Service.generatePresignedUrls(request, folder);
23+
}
24+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.BANnerIt.server.api.s3.domain;
2+
3+
import jakarta.persistence.*;
4+
import lombok.*;
5+
6+
@Entity
7+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
8+
@AllArgsConstructor
9+
@Builder
10+
@Table(name = "images")
11+
public class Image {
12+
@Id
13+
@GeneratedValue(strategy = GenerationType.IDENTITY)
14+
private Long imageId;
15+
16+
private String imageKey;
17+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package com.BANnerIt.server.api.s3.dto;
2+
3+
public record PresignedUrlDto(String key, String url) {
4+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.BANnerIt.server.api.s3.dto;
2+
3+
import java.util.List;
4+
public record PresignedUrlRequest(List<String> files) {
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.BANnerIt.server.api.s3.dto;
2+
3+
import java.util.List;
4+
public record PresignedUrlResponse(List<PresignedUrlDto> key_urls) {
5+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.BANnerIt.server.api.s3.repository;
2+
3+
import com.BANnerIt.server.api.s3.domain.Image;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
public interface ImageRepository extends JpaRepository<Image, Long> {
7+
}

0 commit comments

Comments
 (0)