44import com .example .be .apiPayload .exception .handler .UserHandler ;
55import com .example .be .domain .RefreshToken ;
66import com .example .be .domain .User ;
7- import com .example .be .domain .enums .LoginType ;
87import com .example .be .repository .RefreshTokenRepository ;
98import com .example .be .repository .UserRepository ;
109import com .example .be .web .dto .CommonDTO ;
1514import lombok .RequiredArgsConstructor ;
1615import lombok .extern .slf4j .Slf4j ;
1716import org .springframework .beans .factory .annotation .Value ;
17+ import org .springframework .scheduling .annotation .Scheduled ;
1818import org .springframework .security .web .authentication .SimpleUrlAuthenticationSuccessHandler ;
1919import org .springframework .stereotype .Service ;
20+ import org .springframework .transaction .annotation .Transactional ;
2021
21- import java .net .URLEncoder ;
2222import java .time .LocalDateTime ;
2323import java .util .UUID ;
2424
2727@ RequiredArgsConstructor
2828public class UserServiceImpl extends SimpleUrlAuthenticationSuccessHandler {
2929 private final UserRepository userRepository ;
30- private final JwtUtilServiceImpl jwtUtil ;
30+ private final JwtUtilServiceImpl jwtUtilService ;
3131 private final RefreshTokenRepository refreshTokenRepository ;
3232
3333 @ Value ("${jwt.access-token.expiration-time}" )
@@ -72,7 +72,7 @@ public CommonDTO.IsSuccessDTO login(UserDTO.LoginRequestDto request, HttpServlet
7272 refreshTokenRepository .deleteByUserId (user .getUserId ());
7373
7474 // RefreshToken 재발급
75- String refreshToken = jwtUtil .generateRefreshToken (user .getUserId (), REFRESH_TOKEN_EXPIRATION_TIME );
75+ String refreshToken = jwtUtilService .generateRefreshToken (user .getUserId (), REFRESH_TOKEN_EXPIRATION_TIME );
7676
7777 RefreshToken newRefreshToken = RefreshToken .builder ()
7878 .userId (user .getUserId ())
@@ -82,29 +82,14 @@ public CommonDTO.IsSuccessDTO login(UserDTO.LoginRequestDto request, HttpServlet
8282 refreshTokenRepository .save (newRefreshToken );
8383
8484 // AccessToken 발급
85- String accessToken = jwtUtil .generateAccessToken (user .getUserId (), ACCESS_TOKEN_EXPIRATION_TIME );
86-
87- String origin = httpRequest .getHeader ("Origin" );
88- // boolean isLocalhost = origin != null && origin.contains("localhost");
89- //
90- // // 액세스 토큰 쿠키 설정
91- // if (isLocalhost) {
92- // // 로컬 개발 환경: SameSite=None, Secure=false
93- // response.addHeader("Set-Cookie",
94- // String.format("accessToken=%s; Path=/; Max-Age=%d; HttpOnly; SameSite=None",
95- // accessToken, (int) (ACCESS_TOKEN_EXPIRATION_TIME / 1000)));
96- // response.addHeader("Set-Cookie",
97- // String.format("refreshToken=%s; Path=/; Max-Age=%d; HttpOnly; SameSite=None",
98- // refreshToken, (int) (REFRESH_TOKEN_EXPIRATION_TIME / 1000)));
99- // } else {
100- // 배포 환경: SameSite=None, Secure=true
85+ String accessToken = jwtUtilService .generateAccessToken (user .getUserId (), ACCESS_TOKEN_EXPIRATION_TIME );
86+
10187 response .addHeader ("Set-Cookie" ,
10288 String .format ("accessToken=%s; Path=/; Max-Age=%d; HttpOnly; Secure; SameSite=None" ,
10389 accessToken , (int ) (ACCESS_TOKEN_EXPIRATION_TIME / 1000 )));
10490 response .addHeader ("Set-Cookie" ,
10591 String .format ("refreshToken=%s; Path=/; Max-Age=%d; HttpOnly; Secure; SameSite=None" ,
10692 refreshToken , (int ) (REFRESH_TOKEN_EXPIRATION_TIME / 1000 )));
107- // }
10893
10994 return CommonDTO .IsSuccessDTO .builder ().isSuccess (true ).build ();
11095 }
@@ -116,7 +101,7 @@ public UserDTO.UserResponseDto getUserInfo(String accessToken) {
116101 }
117102
118103 // 토큰에서 사용자 ID 추출
119- String userId = jwtUtil .getUserIdFromToken (accessToken );
104+ String userId = jwtUtilService .getUserIdFromToken (accessToken );
120105
121106 // 사용자 정보 조회
122107 User user = userRepository .findByUserId (UUID .fromString (userId ))
@@ -138,27 +123,12 @@ public CommonDTO.IsSuccessDTO logout(HttpServletResponse response, HttpServletRe
138123 if (cookies == null ) {
139124 throw new UserHandler (ErrorStatus ._NOT_FOUND_COOKIE );
140125 }
141-
142- // Origin 헤더로 환경 판단
143- // String origin = request.getHeader("Origin");
144- // boolean isSecure = origin == null || !origin.contains("localhost");
145-
146- // 쿠키 삭제 - addHeader 방식 사용
147- // if (isSecure) {
148- // 배포 환경
149126 response .addHeader ("Set-Cookie" ,
150127 "accessToken=; Path=/; Max-Age=0; HttpOnly; Secure; SameSite=None" );
151128 response .addHeader ("Set-Cookie" ,
152129 "refreshToken=; Path=/; Max-Age=0; HttpOnly; Secure; SameSite=None" );
153- // } else {
154- // // 로컬 환경
155- // response.addHeader("Set-Cookie",
156- // "accessToken=; Path=/; Max-Age=0; HttpOnly; SameSite=None");
157- // response.addHeader("Set-Cookie",
158- // "refreshToken=; Path=/; Max-Age=0; HttpOnly; SameSite=None");
159- // }
160130
161131 return CommonDTO .IsSuccessDTO .builder ().isSuccess (true ).build ();
162132 }
163-
164133}
134+
0 commit comments