Skip to content

Commit add3947

Browse files
committed
[feat] SameSite 설정을 위해 ResponseCookie를 통해 쿠키 설정 및 응답
1 parent 85d4998 commit add3947

File tree

1 file changed

+24
-12
lines changed

1 file changed

+24
-12
lines changed

src/main/java/kr/dgucaps/caps/global/config/auth/CustomOAuth2SuccessHandler.java

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package kr.dgucaps.caps.global.config.auth;
22

3-
import jakarta.servlet.ServletException;
4-
import jakarta.servlet.http.Cookie;
53
import jakarta.servlet.http.HttpServletRequest;
64
import jakarta.servlet.http.HttpServletResponse;
75
import kr.dgucaps.caps.domain.member.dto.CustomOAuth2User;
@@ -11,6 +9,7 @@
119
import kr.dgucaps.caps.domain.member.service.TokenService;
1210
import lombok.RequiredArgsConstructor;
1311
import org.springframework.beans.factory.annotation.Value;
12+
import org.springframework.http.ResponseCookie;
1413
import org.springframework.security.core.Authentication;
1514
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
1615
import org.springframework.stereotype.Component;
@@ -37,14 +36,13 @@ public class CustomOAuth2SuccessHandler implements AuthenticationSuccessHandler
3736
private String onboardingRedirectUrl;
3837

3938
@Override
40-
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
39+
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException {
4140
CustomOAuth2User customUser = (CustomOAuth2User) authentication.getPrincipal();
4241
Member member = customUser.member();
4342

4443
// 토큰 발급
4544
MemberTokenResponse tokenResponse = tokenService.issueToken(member.getId(), member.getRole());
46-
response.addCookie(createCookie("accessToken", tokenResponse.accessToken(), ACCESS_TOKEN_EXPIRE_TIME));
47-
response.addCookie(createCookie("refreshToken", tokenResponse.refreshToken(), REFRESH_TOKEN_EXPIRE_TIME));
45+
writeTokenCookies(response, tokenResponse);
4846

4947
// 마지막 로그인 시간 업데이트
5048
memberService.updateLastLogin(member);
@@ -57,12 +55,26 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo
5755
}
5856
}
5957

60-
private Cookie createCookie(String key, String value, int expireTime) {
61-
Cookie cookie = new Cookie(key, value);
62-
cookie.setMaxAge(expireTime);
63-
cookie.setSecure(true);
64-
cookie.setPath("/");
65-
cookie.setHttpOnly(true);
66-
return cookie;
58+
private void writeTokenCookies(HttpServletResponse response, MemberTokenResponse token) {
59+
// 쿠키 설정
60+
ResponseCookie accessToken = ResponseCookie.from("accessToken", token.accessToken())
61+
.path("/")
62+
.httpOnly(true)
63+
.secure(true) // HTTPS 연결에서만 전송
64+
.sameSite("None") // 크로스사이트 요청에도 전송
65+
.maxAge(ACCESS_TOKEN_EXPIRE_TIME)
66+
.build();
67+
68+
ResponseCookie refreshToken = ResponseCookie.from("refreshToken", token.refreshToken())
69+
.path("/")
70+
.httpOnly(true)
71+
.secure(true)
72+
.sameSite("None")
73+
.maxAge(REFRESH_TOKEN_EXPIRE_TIME)
74+
.build();
75+
76+
// 쿠키를 응답 헤더에 추가
77+
response.addHeader("Set-Cookie", accessToken.toString());
78+
response.addHeader("Set-Cookie", refreshToken.toString());
6779
}
6880
}

0 commit comments

Comments
 (0)