Skip to content

Commit ce4fc08

Browse files
authored
Merge pull request #55 from FlipNoteTeam/feat/access-token
Feat: AccessToken 쿠키에 저장되도록 수정
2 parents fbcedec + 29d3dc9 commit ce4fc08

6 files changed

Lines changed: 42 additions & 21 deletions

File tree

src/main/java/project/flipnote/auth/controller/AuthController.java

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,10 @@
2323
import project.flipnote.auth.model.request.EmailVerifyRequest;
2424
import project.flipnote.auth.model.request.PasswordResetCreateRequest;
2525
import project.flipnote.auth.model.request.PasswordResetRequest;
26-
import project.flipnote.auth.model.vo.TokenPair;
2726
import project.flipnote.auth.model.request.UserLoginRequest;
28-
import project.flipnote.auth.model.response.UserLoginResponse;
2927
import project.flipnote.auth.model.request.UserRegisterRequest;
3028
import project.flipnote.auth.model.response.UserRegisterResponse;
29+
import project.flipnote.auth.model.vo.TokenPair;
3130
import project.flipnote.auth.service.AuthService;
3231
import project.flipnote.common.security.dto.AuthPrinciple;
3332
import project.flipnote.common.security.jwt.JwtConstants;
@@ -51,11 +50,18 @@ public ResponseEntity<UserRegisterResponse> register(@Valid @RequestBody UserReg
5150
}
5251

5352
@PostMapping("/login")
54-
public ResponseEntity<UserLoginResponse> login(
53+
public ResponseEntity<Void> login(
5554
@Valid @RequestBody UserLoginRequest req
5655
) {
5756
TokenPair tokenPair = authService.login(req);
5857

58+
long accessTokenExpire = jwtProperties.getAccessTokenExpiration().toSeconds();
59+
ResponseCookie accessCookie = cookieUtil.createCookie(
60+
JwtConstants.ACCESS_TOKEN,
61+
tokenPair.accessToken(),
62+
Math.toIntExact(accessTokenExpire)
63+
);
64+
5965
long expirationSeconds = jwtProperties.getRefreshTokenExpiration().toSeconds();
6066
ResponseCookie cookie = cookieUtil.createCookie(
6167
JwtConstants.REFRESH_TOKEN,
@@ -64,8 +70,9 @@ public ResponseEntity<UserLoginResponse> login(
6470
);
6571

6672
return ResponseEntity.ok()
73+
.header(HttpHeaders.SET_COOKIE, accessCookie.toString())
6774
.header(HttpHeaders.SET_COOKIE, cookie.toString())
68-
.body(UserLoginResponse.from(tokenPair.accessToken()));
75+
.build();
6976
}
7077

7178
@PostMapping("/logout")
@@ -94,11 +101,18 @@ public ResponseEntity<Void> verifyEmail(
94101
}
95102

96103
@PostMapping("/token/refresh")
97-
public ResponseEntity<UserLoginResponse> refreshToken(
104+
public ResponseEntity<Void> refreshToken(
98105
@CookieValue(name = JwtConstants.REFRESH_TOKEN) String refreshToken
99106
) {
100107
TokenPair tokenPair = authService.refreshToken(refreshToken);
101108

109+
long accessTokenExpire = jwtProperties.getAccessTokenExpiration().toSeconds();
110+
ResponseCookie accessCookie = cookieUtil.createCookie(
111+
JwtConstants.ACCESS_TOKEN,
112+
tokenPair.accessToken(),
113+
Math.toIntExact(accessTokenExpire)
114+
);
115+
102116
long expirationSeconds = jwtProperties.getRefreshTokenExpiration().toSeconds();
103117
ResponseCookie cookie = cookieUtil.createCookie(
104118
JwtConstants.REFRESH_TOKEN,
@@ -107,8 +121,9 @@ public ResponseEntity<UserLoginResponse> refreshToken(
107121
);
108122

109123
return ResponseEntity.ok()
124+
.header(HttpHeaders.SET_COOKIE, accessCookie.toString())
110125
.header(HttpHeaders.SET_COOKIE, cookie.toString())
111-
.body(UserLoginResponse.from(tokenPair.accessToken()));
126+
.build();
112127
}
113128

114129
@PostMapping("/password-reset/request")

src/main/java/project/flipnote/auth/controller/OAuthController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public class OAuthController implements OAuthControllerDocs {
4242
private final CookieUtil cookieUtil;
4343

4444
@GetMapping("/oauth2/authorization/{provider}")
45-
public ResponseEntity<Void> redirectToProviderAuthorization(
45+
public ResponseEntity<String> redirectToProviderAuthorization(
4646
@PathVariable("provider") String provider,
4747
HttpServletRequest request,
4848
@AuthenticationPrincipal AuthPrinciple userAuth

src/main/java/project/flipnote/auth/controller/docs/AuthControllerDocs.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import project.flipnote.auth.model.request.PasswordResetCreateRequest;
1111
import project.flipnote.auth.model.request.PasswordResetRequest;
1212
import project.flipnote.auth.model.request.UserLoginRequest;
13-
import project.flipnote.auth.model.response.UserLoginResponse;
1413
import project.flipnote.auth.model.request.UserRegisterRequest;
1514
import project.flipnote.auth.model.response.UserRegisterResponse;
1615
import project.flipnote.common.security.dto.AuthPrinciple;
@@ -22,9 +21,9 @@ public interface AuthControllerDocs {
2221
ResponseEntity<UserRegisterResponse> register(UserRegisterRequest req);
2322

2423
@Operation(summary = "로그인")
25-
ResponseEntity<UserLoginResponse> login(UserLoginRequest req);
24+
ResponseEntity<Void> login(UserLoginRequest req);
2625

27-
@Operation(summary = "로그아웃", security = { @SecurityRequirement(name = "access-token") })
26+
@Operation(summary = "로그아웃", security = {@SecurityRequirement(name = "access-token")})
2827
ResponseEntity<Void> logout();
2928

3029
@Operation(summary = "이메일 인증번호 전송")
@@ -34,20 +33,20 @@ public interface AuthControllerDocs {
3433
ResponseEntity<Void> verifyEmail(EmailVerifyRequest req);
3534

3635
@Operation(summary = "토큰 갱신")
37-
ResponseEntity<UserLoginResponse> refreshToken(String refreshToken);
36+
ResponseEntity<Void> refreshToken(String refreshToken);
3837

3938
@Operation(summary = "비밀번호 재설정 링크 전송")
4039
ResponseEntity<Void> requestPasswordReset(PasswordResetCreateRequest req);
4140

4241
@Operation(summary = "비밀번호 재설정")
4342
ResponseEntity<Void> resetPassword(PasswordResetRequest req);
4443

45-
@Operation(summary = "내 비밀번호 변경", security = { @SecurityRequirement(name = "access-token") })
44+
@Operation(summary = "내 비밀번호 변경", security = {@SecurityRequirement(name = "access-token")})
4645
ResponseEntity<Void> updatePassword(AuthPrinciple userAuth, ChangePasswordRequest req);
4746

48-
@Operation(summary = "내 소셜 연동 계정 목록 조회", security = { @SecurityRequirement(name = "access-token") })
47+
@Operation(summary = "내 소셜 연동 계정 목록 조회", security = {@SecurityRequirement(name = "access-token")})
4948
ResponseEntity<SocialLinksResponse> getSocialLinks(AuthPrinciple userAuth);
5049

51-
@Operation(summary = "소셜 연동 해제", security = { @SecurityRequirement(name = "access-token") })
50+
@Operation(summary = "소셜 연동 해제", security = {@SecurityRequirement(name = "access-token")})
5251
ResponseEntity<Void> deleteSocialLink(AuthPrinciple userAuth, Long socialLinkId);
5352
}

src/main/java/project/flipnote/auth/controller/docs/OAuthControllerDocs.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
public interface OAuthControllerDocs {
1212

1313
@Operation(summary = "소셜 인증 URL로 리다이렉트")
14-
ResponseEntity<Void> redirectToProviderAuthorization(
14+
ResponseEntity<String> redirectToProviderAuthorization(
1515
String provider,
1616
HttpServletRequest request,
1717
AuthPrinciple userAuth

src/main/java/project/flipnote/common/security/filter/JwtAuthenticationFilter.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import jakarta.servlet.FilterChain;
1313
import jakarta.servlet.ServletException;
14+
import jakarta.servlet.http.Cookie;
1415
import jakarta.servlet.http.HttpServletRequest;
1516
import jakarta.servlet.http.HttpServletResponse;
1617
import lombok.RequiredArgsConstructor;
@@ -33,6 +34,7 @@ protected void doFilterInternal(
3334
FilterChain filterChain
3435
) throws ServletException, IOException {
3536
String token = extractToken(request);
37+
System.out.println(token);
3638

3739
if (StringUtils.hasText(token)) {
3840
AuthPrinciple userAuth = jwtComponent.extractUserAuthFromToken(token);
@@ -45,9 +47,16 @@ protected void doFilterInternal(
4547
}
4648

4749
private String extractToken(HttpServletRequest request) {
48-
String bearerToken = request.getHeader(JwtConstants.AUTH_HEADER);
49-
if (StringUtils.hasText(bearerToken) && bearerToken.startsWith(JwtConstants.TOKEN_PREFIX)) {
50-
return bearerToken.substring(JwtConstants.TOKEN_PREFIX.length());
50+
Cookie[] cookies = request.getCookies();
51+
if (cookies != null) {
52+
for (Cookie cookie : cookies) {
53+
if (JwtConstants.ACCESS_TOKEN.equals(cookie.getName())) {
54+
String token = cookie.getValue();
55+
if (StringUtils.hasText(token)) {
56+
return token;
57+
}
58+
}
59+
}
5160
}
5261
return null;
5362
}

src/main/java/project/flipnote/common/security/jwt/JwtConstants.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,11 @@
66
@NoArgsConstructor(access = AccessLevel.PRIVATE)
77
public final class JwtConstants {
88

9+
public static final String ACCESS_TOKEN = "accessToken";
910
public static final String REFRESH_TOKEN = "refreshToken";
1011

1112
public static final String ROLE = "role";
1213
public static final String TOKEN_VERSION = "token_version";
1314
public static final String AUTH_ID = "auth_id";
1415
public static final String USER_ID = "user_id";
15-
16-
public static final String AUTH_HEADER = "Authorization";
17-
public static final String TOKEN_PREFIX = "Bearer ";
1816
}

0 commit comments

Comments
 (0)