Skip to content

Commit dda0a30

Browse files
authored
Merge pull request #50 from GTable/feat/#47_관리자페이지주문조회
refactor(Oauth): 로그인 후 리다이렉트 주소 변경
2 parents 11938f6 + 2399095 commit dda0a30

1 file changed

Lines changed: 19 additions & 28 deletions

File tree

external-oauth/src/main/java/com/nowait/externaloauth/oauth2/OAuth2LoginSuccessHandler.java

Lines changed: 19 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.nowait.externaloauth.jwt.JwtUtil;
2020
import com.nowait.user.entity.User;
2121

22+
import jakarta.servlet.http.Cookie;
2223
import jakarta.servlet.http.HttpServletRequest;
2324
import jakarta.servlet.http.HttpServletResponse;
2425
import lombok.RequiredArgsConstructor;
@@ -40,42 +41,32 @@ public class OAuth2LoginSuccessHandler extends SimpleUrlAuthenticationSuccessHan
4041
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
4142
Authentication authentication) throws IOException {
4243

43-
// 1. CustomOAuth2UserService에서 설정한 OAuth2User 정보 가져오기
44-
CustomOAuth2User customUserDetails = (CustomOAuth2User)authentication.getPrincipal();
45-
44+
CustomOAuth2User customUserDetails = (CustomOAuth2User) authentication.getPrincipal();
4645
User user = customUserDetails.getUser();
4746
Long userId = customUserDetails.getUserId();
48-
String email = customUserDetails.getName();
49-
50-
Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
51-
Iterator<? extends GrantedAuthority> iterator = authorities.iterator();
52-
GrantedAuthority auth = iterator.next();
53-
54-
String role = auth.getAuthority();
47+
String role = authentication.getAuthorities().iterator().next().getAuthority();
5548

56-
log.info("user, userId, email, role :: {} {} {} {}", user, userId, email, role);
49+
// JWT 발급
50+
String accessToken = jwtUtil.createAccessToken("accessToken", userId, role, 30 * 60 * 1000L); // 30분
51+
String refreshToken = jwtUtil.createRefreshToken("refreshToken", userId, 30L * 24 * 60 * 60 * 1000L); // 30일
5752

58-
// 2. 1)의 사용자 정보를 담아, accessToken과 refreshToken 발행
59-
String accessToken = jwtUtil.createAccessToken("accessToken", userId, role, 30 * 60 * 1000L); // 유효기간 30분
60-
String refreshToken = jwtUtil.createRefreshToken("refreshToken", userId,
61-
30 * 24 * 60 * 60 * 1000L); // 유효기간 30일
62-
63-
// 3. refreshToken을 DB에 저장
53+
// 1. refreshToken을 DB에 저장
6454
Token refreshTokenEntity = Token.toEntity(user, refreshToken, LocalDateTime.now().plusDays(30));
6555
tokenRepository.save(refreshTokenEntity);
6656

67-
// 4. JSON 응답으로, accessToken과 refreshToken 을 반환해준다.
68-
response.setContentType("application/json");
69-
response.setCharacterEncoding("utf-8");
57+
// 2. refreshToken을 HttpOnly 쿠키로 설정
58+
Cookie refreshTokenCookie = new Cookie("refreshToken", refreshToken);
59+
refreshTokenCookie.setHttpOnly(true); // JS 접근 불가
60+
refreshTokenCookie.setSecure(false); // 운영환경 https라면 true로 변경 필요
61+
refreshTokenCookie.setPath("/");
62+
refreshTokenCookie.setMaxAge(30 * 24 * 60 * 60); // 30일
63+
response.addCookie(refreshTokenCookie);
64+
response.addHeader("Set-Cookie", response.getHeader("Set-Cookie") + "; SameSite=Lax");
65+
7066

71-
ObjectMapper objectMapper = new ObjectMapper(); // 객체 -> json 문자열로 변환
72-
String body = objectMapper.writeValueAsString(
73-
Map.of(
74-
"accessToken", accessToken,
75-
"refreshToken", refreshToken
76-
)
77-
);
78-
response.getWriter().write(body);
67+
// 3. 프론트엔드로 리다이렉트 (accessToken만 쿼리로 전달)
68+
String targetUrl = "http://localhost:5173/login/success?accessToken=" + accessToken;
69+
response.sendRedirect(targetUrl);
7970
}
8071

8172
}

0 commit comments

Comments
 (0)