88import jakarta .servlet .http .Cookie ;
99import jakarta .servlet .http .HttpServletRequest ;
1010import jakarta .servlet .http .HttpServletResponse ;
11- import java .io .IOException ;
12- import java .io .PrintWriter ;
1311import java .net .URLEncoder ;
1412import java .nio .charset .StandardCharsets ;
15- import java .util .Map ;
1613import lombok .AllArgsConstructor ;
1714import org .springframework .http .HttpStatus ;
1815import org .springframework .security .core .Authentication ;
1916import org .springframework .security .web .authentication .AuthenticationSuccessHandler ;
20- import org .springframework .web .util .UriComponentsBuilder ;
21-
17+ import java .io .IOException ;
18+ import java .io .PrintWriter ;
19+ import java .util .Map ;
2220
2321@ AllArgsConstructor
2422public class OAuth2SuccessHandler implements AuthenticationSuccessHandler {
2523
26- private final JWTUtil jwtUtil ;
27- private final CookieService cookieService ;
28-
24+ private final JWTUtil jwtUtil ;
25+ private final CookieService cookieService ;
2926
30- @ Override
31- public void onAuthenticationSuccess (HttpServletRequest request , HttpServletResponse response , Authentication authentication ) throws IOException {
32- // Authentication 객체에서 CustomOAuth2User 정보 가져오기
33- CustomOAuth2User customOAuth2User = (CustomOAuth2User ) authentication .getPrincipal ();
34- User user = customOAuth2User .getUser (); // User 정보 가져오기
27+ @ Override
28+ public void onAuthenticationSuccess (HttpServletRequest request , HttpServletResponse response , Authentication authentication ) throws IOException {
3529
36- // ObjectMapper와 PrintWriter를 한번만 생성
37- ObjectMapper objectMapper = new ObjectMapper ();
38- PrintWriter writer = response . getWriter ();
30+ CustomOAuth2User customOAuth2User = ( CustomOAuth2User ) authentication . getPrincipal ();
31+ User user = customOAuth2User . getUser ();
32+ ObjectMapper objectMapper = new ObjectMapper ();
3933
4034 try {
4135 String accessToken = jwtUtil .createJwt ("access" , user .getEmail (), String .valueOf (user .getRole ()), 30 * 60 * 1000L );
4236 String refreshToken = jwtUtil .createJwt ("refresh" , user .getEmail (), String .valueOf (user .getRole ()), 24 * 60 * 60 * 1000L );
4337
44- Cookie refreshCookie = cookieService .createCookie ( "refresh" , refreshToken , 24 * 60 * 60 * 1000L );
45- response .addCookie (refreshCookie );
46- response .setStatus (HttpStatus .OK .value ());
47- String userJson = objectMapper .writeValueAsString (user );
38+ Cookie refreshCookie = cookieService .createCookie ("refresh" , refreshToken , 24 * 60 * 60 * 1000L );
39+ response .addCookie (refreshCookie );
4840
49- // JSON 직렬화
50- String userjson = objectMapper .writeValueAsString (
51- Map .of (
52- "message" , "Login successful" ,
53- "email" , user .getEmail (),
54- "imgUrl" ,user .getImgUrl (),
55- "userName" ,user .getUsername (),
56- "role" ,user .getRole ()
57- )
58- );
41+ response .setStatus (HttpStatus .OK .value ());
42+ response .setContentType ("application/json;charset=UTF-8" );
5943
60- // URL에 JSON을 쿼리 파라미터로 추가
61- String encodedJson = URLEncoder .encode (userjson , StandardCharsets .UTF_8 );
44+ String userJson = objectMapper .writeValueAsString (
45+ Map .of (
46+ "message" , "Login successful" ,
47+ "email" , user .getEmail (),
48+ "imgUrl" , user .getImgUrl (),
49+ "userName" , user .getUsername (),
50+ "role" , user .getRole ()
51+ )
52+ );
53+ String redirectUrl = "https://app.blockcloud.com/oauth2/callback"
54+ + "?access=" + URLEncoder .encode (accessToken , StandardCharsets .UTF_8 )
55+ + "&user=" + URLEncoder .encode (userJson , StandardCharsets .UTF_8 );
6256
63- String uri = UriComponentsBuilder
64- .newInstance ()
65- .scheme ("http" )
66- .host ("localhost:8080" )
67- .path ("/login/success" )
68- .queryParam ("user" , encodedJson )
69- .queryParam ("access" , accessToken )
70- .build ()
71- .toString ();
72- response .sendRedirect (uri );
73- } catch (IOException e ) {
74- // 에러 처리: 500 응답 전송
75- response .setStatus (HttpStatus .INTERNAL_SERVER_ERROR .value ());
76- writer .write ("{\" message\" : \" An error occurred during authentication\" }" );
77- writer .flush ();
78- }
57+ response .sendRedirect (redirectUrl );
58+ } catch (IOException e ) {
59+ e .printStackTrace ();
60+ response .setStatus (HttpStatus .INTERNAL_SERVER_ERROR .value ());
61+ response .setContentType ("application/json;charset=UTF-8" );
7962
80- }
81- }
63+ try (PrintWriter writer = response .getWriter ()) {
64+ writer .write ("{\" message\" : \" An error occurred during authentication\" }" );
65+ writer .flush ();
66+ }
67+ }
68+ }
69+ }
0 commit comments