Skip to content

Commit f4baf65

Browse files
Merge pull request #40 from SoongSilComputingClub/fix/#39-socialsuccesshandler-cookies-changing-cors-setting
[Fix/#39] SocialSuccessHandler cookie 설정 수정
2 parents ee97e8c + cbd1a27 commit f4baf65

4 files changed

Lines changed: 24 additions & 9 deletions

File tree

src/main/java/com/example/ssccwebbe/global/security/handler/SocialSuccessHandler.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
import java.util.Map;
55

66
import jakarta.servlet.ServletException;
7-
import jakarta.servlet.http.Cookie;
87
import jakarta.servlet.http.HttpServletRequest;
98
import jakarta.servlet.http.HttpServletResponse;
109

1110
import org.springframework.beans.factory.annotation.Qualifier;
1211
import org.springframework.beans.factory.annotation.Value;
12+
import org.springframework.http.ResponseCookie;
1313
import org.springframework.security.core.Authentication;
1414
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
1515
import org.springframework.stereotype.Component;
@@ -30,6 +30,12 @@ public class SocialSuccessHandler implements AuthenticationSuccessHandler {
3030
@Value("${frontend.cookie.secure}")
3131
private boolean cookieSecure;
3232

33+
@Value("${frontend.cookie.same-site}")
34+
private String cookieSameSite;
35+
36+
@Value("${frontend.cookie.http-only}")
37+
private boolean cookieHttpOnly;
38+
3339
public SocialSuccessHandler(@Qualifier("preJwtService") JwtService preJwtService) {
3440
// JWT Service 매핑 (Strategy 패턴)
3541
this.jwtServiceMap =
@@ -62,14 +68,17 @@ public void onAuthenticationSuccess(
6268
// 발급한 Refresh DB 테이블 저장 (Refresh whitelist)
6369
jwtService.addRefresh(username, refreshToken);
6470

65-
// 응답
66-
Cookie refreshCookie = new Cookie("refreshToken", refreshToken);
67-
refreshCookie.setHttpOnly(true);
68-
refreshCookie.setSecure(cookieSecure);
69-
refreshCookie.setPath("/");
70-
refreshCookie.setMaxAge(10); // 10초 (프론트에서 발급 후 바로 헤더 전환 로직 진행 예정)
71-
72-
response.addCookie(refreshCookie);
71+
// 응답 (ResponseCookie 사용 - SameSite 속성 지원)
72+
ResponseCookie refreshCookie =
73+
ResponseCookie.from("refreshToken", refreshToken)
74+
.httpOnly(cookieHttpOnly)
75+
.secure(cookieSecure)
76+
.path("/")
77+
.maxAge(10) // 10초 (프론트에서 발급 후 바로 헤더 전환 로직 진행 예정)
78+
.sameSite(cookieSameSite) // SameSite 속성 추가
79+
.build();
80+
81+
response.addHeader("Set-Cookie", refreshCookie.toString());
7382
response.sendRedirect(frontendUrl + "/cookie"); // 프론트 주소로 redirect
7483
}
7584

src/main/resources/application-local.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ frontend:
4242
url: http://localhost:5173
4343
cookie:
4444
secure: false
45+
same-site: none
46+
http-only: true
4547

4648
logging:
4749
level:

src/main/resources/application-prod.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ frontend:
4040
url: ${FRONTEND_URL}
4141
cookie:
4242
secure: true
43+
same-site: none
44+
http-only: true
4345

4446
logging:
4547
level:

src/main/resources/application.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ frontend:
8585
url: http://localhost:5173
8686
cookie:
8787
secure: false
88+
same-site: Lax # 기본값 (로컬 개발용)
89+
http-only: true
8890

8991
logging:
9092
level:

0 commit comments

Comments
 (0)