Skip to content

Commit 4979706

Browse files
authored
Merge branch 'develop' into feat/terraform
2 parents 6084317 + 742b312 commit 4979706

File tree

2 files changed

+76
-85
lines changed

2 files changed

+76
-85
lines changed
Lines changed: 38 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,49 @@
11
package com.blockcloud.dto.oauth;
22

33
import com.blockcloud.domain.user.User;
4+
import java.util.ArrayList;
45
import java.util.Collection;
56
import java.util.Map;
67
import lombok.AllArgsConstructor;
78
import org.springframework.security.core.GrantedAuthority;
9+
import org.springframework.security.core.authority.SimpleGrantedAuthority; // import 추가
810
import org.springframework.security.oauth2.core.user.OAuth2User;
911

1012
@AllArgsConstructor
1113
public class CustomOAuth2User implements OAuth2User {
12-
private final User user;
13-
14-
15-
@Override
16-
public Map<String, Object> getAttributes() {
17-
return null;
18-
}
19-
20-
@Override
21-
public String getName() {
22-
return user.getUsername(); // 예: principal로 사용할 이메일 반환
23-
}
24-
25-
public String getEmail() {
26-
return user.getEmail();
27-
}
28-
29-
public String getRole() {
30-
return user.getRole();
31-
}
32-
33-
public String getImageUrl() {
34-
return user.getImgUrl();
35-
}
36-
37-
38-
@Override
39-
public Collection<? extends GrantedAuthority> getAuthorities() {
40-
return null;
41-
}
42-
43-
public User getUser() {
44-
return user;
45-
}
46-
}
14+
private final User user;
15+
16+
@Override
17+
public Map<String, Object> getAttributes() {
18+
return Map.of();
19+
}
20+
21+
@Override
22+
public String getName() {
23+
return user.getEmail();
24+
}
25+
26+
public String getEmail() {
27+
return user.getEmail();
28+
}
29+
30+
public String getRole() {
31+
return user.getRole();
32+
}
33+
34+
public String getImageUrl() {
35+
return user.getImgUrl();
36+
}
37+
38+
39+
@Override
40+
public Collection<? extends GrantedAuthority> getAuthorities() {
41+
Collection<GrantedAuthority> authorities = new ArrayList<>();
42+
authorities.add(new SimpleGrantedAuthority("ROLE_" + user.getRole()));
43+
return authorities;
44+
}
45+
46+
public User getUser() {
47+
return user;
48+
}
49+
}

src/main/java/com/blockcloud/exception/handler/OAuth2SuccessHandler.java

Lines changed: 38 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -8,74 +8,62 @@
88
import jakarta.servlet.http.Cookie;
99
import jakarta.servlet.http.HttpServletRequest;
1010
import jakarta.servlet.http.HttpServletResponse;
11-
import java.io.IOException;
12-
import java.io.PrintWriter;
1311
import java.net.URLEncoder;
1412
import java.nio.charset.StandardCharsets;
15-
import java.util.Map;
1613
import lombok.AllArgsConstructor;
1714
import org.springframework.http.HttpStatus;
1815
import org.springframework.security.core.Authentication;
1916
import 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
2422
public 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

Comments
 (0)