Skip to content

Commit 9e4fdeb

Browse files
committed
♻️ CORS 설정 리팩토링 및 OAuth2 콜백 로그 추가
- CORS 허용 도메인 설정을 properties 배열로 변경하여 List 형태로 주입 - CORS maxAge를 상수(1시간)로 처리 - OAuth2 콜백 컨트롤러에 디버깅용 로그 추가 - 변경된 CORS 설정에 맞춰 Spring Security config 수정 ref: #145
1 parent fd9dd3e commit 9e4fdeb

File tree

4 files changed

+35
-13
lines changed

4 files changed

+35
-13
lines changed

src/main/java/com/boggle_boggle/bbegok/config/properties/CorsProperties.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@
44
import lombok.Setter;
55
import org.springframework.boot.context.properties.ConfigurationProperties;
66

7+
import java.util.List;
8+
79
@Getter
810
@Setter
911
@ConfigurationProperties(prefix = "cors")
1012
public class CorsProperties {
11-
private String allowedOrigins;
12-
private String allowedMethods;
13+
private List<String> allowedOrigins;
14+
private List<String> allowedMethods;
1315
private String allowedHeaders;
1416
private Boolean allowCredentials;
15-
private Long maxAge;
17+
private Long maxAge = 3600L; // 기본 1시간
1618
}

src/main/java/com/boggle_boggle/bbegok/config/security/SecurityConfig.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,10 @@ public UrlBasedCorsConfigurationSource corsConfigurationSource() {
8585
UrlBasedCorsConfigurationSource corsConfigSource = new UrlBasedCorsConfigurationSource();
8686

8787
CorsConfiguration corsConfig = new CorsConfiguration();
88+
corsConfig.setAllowCredentials(Boolean.TRUE.equals(corsProperties.getAllowCredentials()));
89+
corsConfig.setAllowedOrigins(corsProperties.getAllowedOrigins());
90+
corsConfig.setAllowedMethods(corsProperties.getAllowedMethods());
8891
corsConfig.setAllowedHeaders(Arrays.asList(corsProperties.getAllowedHeaders().split(",")));
89-
corsConfig.setAllowedMethods(Arrays.asList(corsProperties.getAllowedMethods().split(",")));
90-
corsConfig.setAllowedOrigins(Arrays.asList(corsProperties.getAllowedOrigins().split(",")));
91-
corsConfig.setAllowCredentials(corsProperties.getAllowCredentials());
9292
corsConfig.setMaxAge(corsConfig.getMaxAge());
9393

9494
corsConfigSource.registerCorsConfiguration("/**", corsConfig);

src/main/java/com/boggle_boggle/bbegok/controller/OAuth2AuthController.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import jakarta.servlet.http.HttpSession;
2929
import jakarta.validation.Valid;
3030
import lombok.RequiredArgsConstructor;
31+
import lombok.extern.slf4j.Slf4j;
3132
import org.springframework.web.bind.annotation.*;
3233
import org.springframework.beans.factory.annotation.Value;
3334
import org.springframework.web.util.UriComponentsBuilder;
@@ -44,6 +45,7 @@
4445
@RestController
4546
@RequestMapping("/auth")
4647
@RequiredArgsConstructor
48+
@Slf4j
4749
public class OAuth2AuthController {
4850
private static final String preSignupIdCookieName = "pre_signup_id";
4951
private final OAuth2LoginService oauth2LoginService;
@@ -91,10 +93,7 @@ public DataResponseDto<Void> signup(@Valid @RequestBody SignupRequest signupRequ
9193
public void authorize(@RequestParam("provider") ProviderType providerType,
9294
@RequestParam("redirect") String redirectFront, HttpSession session,
9395
HttpServletResponse response) throws IOException {
94-
List<String> origins = Arrays.stream(corsProperties.getAllowedOrigins().split(","))
95-
.map(String::trim)
96-
.filter(s -> !s.isBlank())
97-
.toList();
96+
List<String> origins = corsProperties.getAllowedOrigins();
9897

9998
if (origins.stream().noneMatch(redirectFront::startsWith)) {
10099
response.sendError(400, "invalid front url");
@@ -121,6 +120,8 @@ public void oauth2Callback(
121120
OauthValidateUtil.validateState(request, state);
122121
OAuthLoginResponse oauthLoginResponse = oauth2LoginService.processOAuth2Callback(providerType, code, state);
123122

123+
log.info("[OAuth Controller] Callback Service 정상 실행 - status: {}", oauthLoginResponse.getStatus());
124+
124125
if(oauthLoginResponse.getStatus() == SignStatus.EXISTING_USER) { //기존유저 - RefreshToken 및 DiviceId만 쿠키에 포함해서 리다이렉트
125126
queryService.setLoginCookie(request, response, oauthLoginResponse);
126127
} else if(oauthLoginResponse.getStatus() == SignStatus.SIGNUP_REQUIRED) { //신규유저 - preSignupUd를 쿠키에 포함해서 리다이렉트
@@ -129,14 +130,24 @@ public void oauth2Callback(
129130
throw new GeneralException(Code.BAD_REQUEST);
130131
}
131132

133+
log.info("[OAuth Controller] 쿠키 셋팅 완료");
134+
132135
//https://{프론트}/auth?status={}'으로 redirect
133136
HttpSession session = request.getSession();
134137
String redirectFront = (String) session.getAttribute("redirect_front");
135-
if (redirectFront == null || corsProperties.getAllowedOrigins().lines().noneMatch(redirectFront::startsWith)) {
138+
log.info("[OAuth Controller] redirectFront : {}", redirectFront);
139+
log.info("Allowed origins list:");
140+
List<String> origins = corsProperties.getAllowedOrigins();
141+
for(String str : origins) log.info("-> {}",str);
142+
143+
log.info("true or false : {}, {}",redirectFront == null, !origins.contains(redirectFront));
144+
if (redirectFront == null || !origins.contains(redirectFront)) {
136145
response.sendError(400, "invalid redirect front url");
137146
return;
138147
}
139148

149+
log.info("[OAuth Controller] 리다이렉트 셋팅하기");
150+
140151
session.removeAttribute("redirect_front");
141152
session.removeAttribute("oauth2_state");
142153

@@ -147,6 +158,7 @@ public void oauth2Callback(
147158
.build()
148159
.toUriString();
149160

161+
log.info("[OAuth Controller] 리다이렉트 꼬");
150162
response.sendRedirect(frontUrl);
151163
}
152164

src/main/resources/application.properties

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,16 @@ logging.level.com.boggle_boggle.bbegok=INFO
2323
bbaegok.root-domain=${ROOT_DOMAIN_NAME}
2424

2525
# cors
26-
cors.allowed-origins=https://localhost:5173,https://${ROOT_DOMAIN_NAME},https://${FRONT_DEV_DOMAIN_NAME},https://appleid.apple.com
27-
cors.allowed-methods=GET,POST,PUT,PATCH,DELETE,OPTIONS
26+
cors.allowed-origins[0]=https://localhost:5173
27+
cors.allowed-origins[1]=https://${ROOT_DOMAIN_NAME}
28+
cors.allowed-origins[2]=https://${FRONT_DEV_DOMAIN_NAME}
29+
cors.allowed-origins[3]=https://appleid.apple.com
30+
cors.allowed-methods[0]=GET
31+
cors.allowed-methods[1]=POST
32+
cors.allowed-methods[2]=PUT
33+
cors.allowed-methods[3]=PATCH
34+
cors.allowed-methods[4]=DELETE
35+
cors.allowed-methods[5]=OPTIONS
2836
cors.allowed-headers=*
2937
cors.allow-credentials=true
3038

0 commit comments

Comments
 (0)