Skip to content

Commit eb65361

Browse files
authored
fix: Dev 환경 쿠키 이슈 해결 및 관련 로직 개선 (#276)
* chore: 테스트 트리거 활성화 * fix: 개발환경에서는 쿠키의 secure 옵션 false이도록 수정 * refactor: 변수명 변경 * fix: CORS dev 설정 롤백 * refactor: enum을 대체하는 환경변수 상수 클래스 추가 * refactor: 운영환경 체크 유틸리티에서 새로운 상수 클래스를 사용하도록 개선 * refactor: 원시 boolean 사용하도록 변경 * refactor: 새로운 상수 클래스 사용하도록 개선 * refactor: 기존 상수 클래스 대체하도록 변경 * refactor: sameSite 상수 사용하도록 변경 * refactor: 쿠키 헤더 상수로 변경 * refactor: cors origin 로직에서 switch문 제거하도록 개선 * refactor: secure 정책 로직 개선 * chore: 테스트 트리거 비활성화 * fix: SameSite가 None일 때 작동할 수 있도록 secure을 항상 참으로 설정 * refactor: 롬복 기본 생성자를 사용하도록 변경
1 parent 434f2a4 commit eb65361

File tree

5 files changed

+41
-54
lines changed

5 files changed

+41
-54
lines changed
Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package com.depromeet.global.common.constants;
22

3-
import lombok.AllArgsConstructor;
4-
import lombok.Getter;
3+
import java.util.List;
4+
import lombok.AccessLevel;
5+
import lombok.NoArgsConstructor;
56

6-
@Getter
7-
@AllArgsConstructor
8-
public enum EnvironmentConstants {
9-
PROD("prod"),
10-
DEV("dev"),
11-
LOCAL("local"),
12-
;
7+
@NoArgsConstructor(access = AccessLevel.PRIVATE)
8+
public class EnvironmentConstants {
139

14-
private String value;
10+
public static final String PROD = "prod";
11+
public static final String DEV = "dev";
12+
public static final String LOCAL = "local";
13+
public static final List<String> PROD_AND_DEV = List.of(PROD, DEV);
1514
}

src/main/java/com/depromeet/global/config/security/WebSecurityConfig.java

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.depromeet.global.config.security;
22

3+
import static com.depromeet.global.common.constants.EnvironmentConstants.*;
4+
import static org.springframework.http.HttpHeaders.*;
35
import static org.springframework.security.config.Customizer.*;
46

57
import com.depromeet.domain.auth.application.JwtTokenService;
@@ -117,26 +119,19 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti
117119
public CorsConfigurationSource corsConfigurationSource() {
118120
CorsConfiguration configuration = new CorsConfiguration();
119121

120-
switch (springEnvironmentUtil.getCurrentProfile()) {
121-
case "prod":
122-
configuration.addAllowedOriginPattern(UrlConstants.PROD_DOMAIN_URL.getValue());
123-
break;
124-
// TODO: 프론트 모바일에서 웹뷰 테스트를 위해 임시 주석 처리
125-
// case "dev":
126-
//
127-
// configuration.addAllowedOriginPattern(UrlConstants.DEV_DOMAIN_URL.getValue());
128-
//
129-
// configuration.addAllowedOriginPattern(UrlConstants.LOCAL_DOMAIN_URL.getValue());
130-
// break;
131-
default:
132-
configuration.addAllowedOriginPattern("*");
133-
break;
122+
if (springEnvironmentUtil.isProdProfile()) {
123+
configuration.addAllowedOriginPattern(UrlConstants.PROD_DOMAIN_URL.getValue());
124+
}
125+
126+
if (springEnvironmentUtil.isDevProfile()) {
127+
configuration.addAllowedOriginPattern(UrlConstants.DEV_DOMAIN_URL.getValue());
128+
configuration.addAllowedOriginPattern(UrlConstants.LOCAL_DOMAIN_URL.getValue());
134129
}
135130

136131
configuration.addAllowedHeader("*");
137132
configuration.addAllowedMethod("*");
138133
configuration.setAllowCredentials(true);
139-
configuration.addExposedHeader("Set-Cookie");
134+
configuration.addExposedHeader(SET_COOKIE);
140135

141136
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
142137
source.registerCorsConfiguration("/**", configuration);

src/main/java/com/depromeet/global/util/CookieUtil.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import static com.depromeet.global.common.constants.SecurityConstants.REFRESH_TOKEN_COOKIE_NAME;
55

66
import lombok.RequiredArgsConstructor;
7+
import org.springframework.boot.web.server.Cookie;
78
import org.springframework.http.HttpHeaders;
89
import org.springframework.http.ResponseCookie;
910
import org.springframework.stereotype.Component;
@@ -23,15 +24,15 @@ public HttpHeaders generateTokenCookies(String accessToken, String refreshToken)
2324
.path("/")
2425
.secure(true)
2526
.sameSite(sameSite)
26-
.httpOnly(false)
27+
.httpOnly(true)
2728
.build();
2829

2930
ResponseCookie refreshTokenCookie =
3031
ResponseCookie.from(REFRESH_TOKEN_COOKIE_NAME, refreshToken)
3132
.path("/")
3233
.secure(true)
3334
.sameSite(sameSite)
34-
.httpOnly(false)
35+
.httpOnly(true)
3536
.build();
3637

3738
HttpHeaders headers = new HttpHeaders();
@@ -43,8 +44,8 @@ public HttpHeaders generateTokenCookies(String accessToken, String refreshToken)
4344

4445
private String determineSameSitePolicy() {
4546
if (springEnvironmentUtil.isProdProfile()) {
46-
return "Strict";
47+
return Cookie.SameSite.STRICT.attributeValue();
4748
}
48-
return "None";
49+
return Cookie.SameSite.NONE.attributeValue();
4950
}
5051
}

src/main/java/com/depromeet/global/util/SpringEnvironmentUtil.java

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package com.depromeet.global.util;
22

3-
import com.depromeet.global.common.constants.EnvironmentConstants;
3+
import static com.depromeet.global.common.constants.EnvironmentConstants.*;
4+
45
import java.util.Arrays;
5-
import java.util.List;
66
import java.util.stream.Stream;
77
import lombok.RequiredArgsConstructor;
88
import org.springframework.core.env.Environment;
@@ -11,30 +11,25 @@
1111
@Component
1212
@RequiredArgsConstructor
1313
public class SpringEnvironmentUtil {
14-
private final Environment environment;
1514

16-
private final List<String> PROD_AND_DEV =
17-
List.of(EnvironmentConstants.PROD.getValue(), EnvironmentConstants.DEV.getValue());
15+
private final Environment environment;
1816

1917
public String getCurrentProfile() {
2018
return getActiveProfiles()
21-
.filter(
22-
profile ->
23-
profile.equals(EnvironmentConstants.PROD.getValue())
24-
|| profile.equals(EnvironmentConstants.DEV.getValue()))
19+
.filter(profile -> profile.equals(PROD) || profile.equals(DEV))
2520
.findFirst()
26-
.orElse(EnvironmentConstants.LOCAL.getValue());
21+
.orElse(LOCAL);
2722
}
2823

29-
public Boolean isProdProfile() {
30-
return getActiveProfiles().anyMatch(EnvironmentConstants.PROD.getValue()::equals);
24+
public boolean isProdProfile() {
25+
return getActiveProfiles().anyMatch(PROD::equals);
3126
}
3227

33-
public Boolean isDevProfile() {
34-
return getActiveProfiles().anyMatch(EnvironmentConstants.DEV.getValue()::equals);
28+
public boolean isDevProfile() {
29+
return getActiveProfiles().anyMatch(DEV::equals);
3530
}
3631

37-
public Boolean isProdAndDevProfile() {
32+
public boolean isProdAndDevProfile() {
3833
return getActiveProfiles().anyMatch(PROD_AND_DEV::contains);
3934
}
4035

src/test/java/com/depromeet/global/util/SpringEnvironmentUtilTest.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.depromeet.global.util;
22

3+
import static com.depromeet.global.common.constants.EnvironmentConstants.*;
34
import static org.junit.jupiter.api.Assertions.*;
45
import static org.mockito.BDDMockito.*;
56

6-
import com.depromeet.global.common.constants.EnvironmentConstants;
77
import org.junit.jupiter.api.Test;
88
import org.junit.jupiter.api.extension.ExtendWith;
99
import org.mockito.InjectMocks;
@@ -17,9 +17,9 @@ class SpringEnvironmentUtilTest {
1717

1818
@InjectMocks private SpringEnvironmentUtil springEnvironmentUtil;
1919

20-
private final String[] PROD_ARRAY = new String[] {EnvironmentConstants.PROD.getValue()};
21-
private final String[] DEV_ARRAY = new String[] {EnvironmentConstants.DEV.getValue()};
22-
private final String[] LOCAL_ARRAY = new String[] {EnvironmentConstants.LOCAL.getValue()};
20+
private static final String[] PROD_ARRAY = new String[] {PROD};
21+
private static final String[] DEV_ARRAY = new String[] {DEV};
22+
private static final String[] LOCAL_ARRAY = new String[] {LOCAL};
2323

2424
@Test
2525
void 상용_환경이라면_isProdProfile은_true를_반환한다() {
@@ -88,8 +88,7 @@ class SpringEnvironmentUtilTest {
8888

8989
// when
9090
// then
91-
assertEquals(
92-
springEnvironmentUtil.getCurrentProfile(), EnvironmentConstants.PROD.getValue());
91+
assertEquals(springEnvironmentUtil.getCurrentProfile(), PROD);
9392
}
9493

9594
@Test
@@ -99,8 +98,7 @@ class SpringEnvironmentUtilTest {
9998

10099
// when
101100
// then
102-
assertEquals(
103-
springEnvironmentUtil.getCurrentProfile(), EnvironmentConstants.DEV.getValue());
101+
assertEquals(springEnvironmentUtil.getCurrentProfile(), DEV);
104102
}
105103

106104
@Test
@@ -110,7 +108,6 @@ class SpringEnvironmentUtilTest {
110108

111109
// when
112110
// then
113-
assertEquals(
114-
springEnvironmentUtil.getCurrentProfile(), EnvironmentConstants.LOCAL.getValue());
111+
assertEquals(springEnvironmentUtil.getCurrentProfile(), LOCAL);
115112
}
116113
}

0 commit comments

Comments
 (0)