Skip to content

Commit 7a727c4

Browse files
committedAug 25, 2024
cors 오류 수정
1 parent d2bb4a5 commit 7a727c4

File tree

2 files changed

+55
-14
lines changed

2 files changed

+55
-14
lines changed
 
Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,45 @@
11
package codeview.main.auth.handler;
22

33
import codeview.main.auth.jwt.TokenProvider;
4-
import jakarta.servlet.ServletException;
5-
import jakarta.servlet.http.HttpServletRequest;
6-
import jakarta.servlet.http.HttpServletResponse;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
75
import lombok.RequiredArgsConstructor;
6+
import org.springframework.http.HttpStatus;
87
import org.springframework.security.core.Authentication;
98
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
109
import org.springframework.stereotype.Component;
11-
import org.springframework.web.util.UriComponentsBuilder;
1210

11+
import jakarta.servlet.ServletException;
12+
import jakarta.servlet.http.HttpServletRequest;
13+
import jakarta.servlet.http.HttpServletResponse;
1314
import java.io.IOException;
15+
import java.util.HashMap;
16+
import java.util.Map;
1417

1518
@RequiredArgsConstructor
1619
@Component
1720
public class OAuth2SuccessHandler implements AuthenticationSuccessHandler {
1821

1922
private final TokenProvider tokenProvider;
20-
private static final String URI = "/auth/success";
2123

2224
@Override
2325
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
2426
Authentication authentication) throws IOException, ServletException {
27+
2528
String accessToken = tokenProvider.generateAccessToken(authentication);
26-
tokenProvider.generateRefreshToken(authentication, accessToken);
29+
String refreshToken = tokenProvider.generateRefreshToken(authentication, accessToken);
30+
31+
32+
Map<String, Object> responseBody = new HashMap<>();
33+
responseBody.put("code", 200);
34+
Map<String, String> result = new HashMap<>();
35+
result.put("accessToken", accessToken);
36+
result.put("refreshToken", refreshToken);
37+
responseBody.put("result", result);
2738

28-
String redirectUrl = UriComponentsBuilder.fromUriString(URI)
29-
.queryParam("accessToken", accessToken)
30-
.build().toUriString();
3139

32-
response.sendRedirect(redirectUrl);
40+
response.setContentType("application/json");
41+
response.setCharacterEncoding("UTF-8");
42+
response.getWriter().write(new ObjectMapper().writeValueAsString(responseBody));
43+
response.setStatus(HttpStatus.OK.value());
3344
}
3445
}

‎src/main/java/codeview/main/config/SecurityConfig.java

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import codeview.main.auth.handler.OAuth2SuccessHandler;
44
import codeview.main.auth.jwt.TokenAuthenticationFilter;
55
import codeview.main.auth.jwt.TokenExceptionFilter;
6+
import codeview.main.auth.jwt.TokenProvider;
67
import codeview.main.auth.service.CustomOAuth2UserService;
78
import lombok.RequiredArgsConstructor;
89
import org.springframework.context.annotation.Bean;
@@ -14,10 +15,14 @@
1415
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
1516
import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer;
1617
import org.springframework.security.config.http.SessionCreationPolicy;
17-
import org.springframework.security.oauth2.client.web.OAuth2LoginAuthenticationFilter;
1818
import org.springframework.security.web.SecurityFilterChain;
1919
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
2020
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
21+
import org.springframework.web.cors.CorsConfiguration;
22+
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
23+
import org.springframework.web.filter.CorsFilter;
24+
25+
import java.util.Arrays;
2126

2227
@RequiredArgsConstructor
2328
@Configuration
@@ -26,8 +31,8 @@
2631
public class SecurityConfig {
2732

2833
private final CustomOAuth2UserService customOAuth2UserService;
29-
private final OAuth2SuccessHandler oAuth2SuccessHandler;
3034
private final TokenAuthenticationFilter tokenAuthenticationFilter;
35+
private final TokenProvider tokenProvider;
3136

3237
@Bean
3338
public WebSecurityCustomizer webSecurityCustomizer() {
@@ -38,7 +43,7 @@ public WebSecurityCustomizer webSecurityCustomizer() {
3843
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
3944
http
4045
.csrf(AbstractHttpConfigurer::disable)
41-
.cors(AbstractHttpConfigurer::disable)
46+
.cors(cors -> cors.configurationSource(corsConfigurationSource()))
4247
.httpBasic(AbstractHttpConfigurer::disable)
4348
.formLogin(AbstractHttpConfigurer::disable)
4449
.logout(AbstractHttpConfigurer::disable)
@@ -56,7 +61,7 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti
5661

5762
.oauth2Login(oauth -> oauth
5863
.loginPage("/login")
59-
.successHandler(oAuth2SuccessHandler)
64+
.successHandler(new OAuth2SuccessHandler(tokenProvider))
6065
.userInfoEndpoint(userInfo -> userInfo
6166
.userService(customOAuth2UserService)))
6267
.addFilterBefore(tokenAuthenticationFilter, UsernamePasswordAuthenticationFilter.class)
@@ -67,4 +72,29 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti
6772
.accessDeniedHandler(new CustomAccessDeniedHandler()));
6873
return http.build();
6974
}
75+
76+
@Bean
77+
public CorsFilter corsFilter() {
78+
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
79+
CorsConfiguration config = new CorsConfiguration();
80+
config.setAllowCredentials(true);
81+
config.setAllowedOrigins(Arrays.asList("http://localhost:3000"));
82+
config.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE"));
83+
config.setAllowedHeaders(Arrays.asList("*"));
84+
source.registerCorsConfiguration("/**", config);
85+
return new CorsFilter(source);
86+
}
87+
88+
@Bean
89+
public UrlBasedCorsConfigurationSource corsConfigurationSource() {
90+
CorsConfiguration config = new CorsConfiguration();
91+
config.setAllowCredentials(true);
92+
config.setAllowedOrigins(Arrays.asList("http://localhost:3000"));
93+
config.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE"));
94+
config.setAllowedHeaders(Arrays.asList("*"));
95+
96+
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
97+
source.registerCorsConfiguration("/**", config);
98+
return source;
99+
}
70100
}

0 commit comments

Comments
 (0)
Please sign in to comment.