diff --git a/common/src/main/java/com/kt/event/common/security/JwtTokenProvider.java b/common/src/main/java/com/kt/event/common/security/JwtTokenProvider.java index 7bd50c3..979c7a6 100644 --- a/common/src/main/java/com/kt/event/common/security/JwtTokenProvider.java +++ b/common/src/main/java/com/kt/event/common/security/JwtTokenProvider.java @@ -56,13 +56,14 @@ public class JwtTokenProvider { * @param roles 역할 목록 * @return Access Token */ - public String createAccessToken(UUID userId, UUID storeId, String email, String name, List roles) { + + public String createAccessToken(Long userId, Long storeId, String email, String name, List roles) { Date now = new Date(); Date expiryDate = new Date(now.getTime() + accessTokenValidityMs); return Jwts.builder() .subject(userId.toString()) - .claim("storeId", storeId.toString()) + .claim("storeId", storeId != null ? storeId.toString() : null) .claim("email", email) .claim("name", name) .claim("roles", roles) @@ -112,8 +113,9 @@ public class JwtTokenProvider { public UserPrincipal getUserPrincipalFromToken(String token) { Claims claims = parseToken(token); - UUID userId = UUID.fromString(claims.getSubject()); - UUID storeId = UUID.fromString(claims.get("storeId", String.class)); + Long userId = Long.parseLong(claims.getSubject()); + String storeIdStr = claims.get("storeId", String.class); + Long storeId = storeIdStr != null ? Long.parseLong(storeIdStr) : null; String email = claims.get("email", String.class); String name = claims.get("name", String.class); @SuppressWarnings("unchecked") diff --git a/common/src/main/java/com/kt/event/common/security/UserPrincipal.java b/common/src/main/java/com/kt/event/common/security/UserPrincipal.java index ff99809..5b20fe8 100644 --- a/common/src/main/java/com/kt/event/common/security/UserPrincipal.java +++ b/common/src/main/java/com/kt/event/common/security/UserPrincipal.java @@ -31,6 +31,11 @@ public class UserPrincipal implements UserDetails { */ private final UUID storeId; + /** + * 매장 ID + */ + private final Long storeId; + /** * 사용자 이메일 */ diff --git a/user-service/src/main/java/com/kt/event/user/service/impl/AuthenticationServiceImpl.java b/user-service/src/main/java/com/kt/event/user/service/impl/AuthenticationServiceImpl.java index 8ccd04b..0694c81 100644 --- a/user-service/src/main/java/com/kt/event/user/service/impl/AuthenticationServiceImpl.java +++ b/user-service/src/main/java/com/kt/event/user/service/impl/AuthenticationServiceImpl.java @@ -5,8 +5,10 @@ import com.kt.event.common.security.JwtTokenProvider; import com.kt.event.user.dto.request.LoginRequest; import com.kt.event.user.dto.response.LoginResponse; import com.kt.event.user.dto.response.LogoutResponse; +import com.kt.event.user.entity.Store; import com.kt.event.user.entity.User; import com.kt.event.user.exception.UserErrorCode; +import com.kt.event.user.repository.StoreRepository; import com.kt.event.user.repository.UserRepository; import com.kt.event.user.service.AuthenticationService; import com.kt.event.user.service.UserService; @@ -34,6 +36,7 @@ import java.util.concurrent.TimeUnit; public class AuthenticationServiceImpl implements AuthenticationService { private final UserRepository userRepository; + private final StoreRepository storeRepository; private final PasswordEncoder passwordEncoder; private final JwtTokenProvider jwtTokenProvider; private final UserService userService; @@ -42,10 +45,12 @@ public class AuthenticationServiceImpl implements AuthenticationService { private RedisTemplate redisTemplate; public AuthenticationServiceImpl(UserRepository userRepository, + StoreRepository storeRepository, PasswordEncoder passwordEncoder, JwtTokenProvider jwtTokenProvider, UserService userService) { this.userRepository = userRepository; + this.storeRepository = storeRepository; this.passwordEncoder = passwordEncoder; this.jwtTokenProvider = jwtTokenProvider; this.userService = userService; @@ -68,21 +73,26 @@ public class AuthenticationServiceImpl implements AuthenticationService { throw new BusinessException(UserErrorCode.AUTH_FAILED.getErrorCode()); } - // 3. JWT 토큰 생성 + // 3. 매장 정보 조회 + Store store = storeRepository.findByUserId(user.getId()).orElse(null); + Long storeId = store != null ? store.getId() : null; + + // 4. JWT 토큰 생성 String token = jwtTokenProvider.createAccessToken( user.getId(), + storeId, user.getEmail(), user.getName(), List.of(user.getRole().name()) ); - // 4. Redis 세션 저장 (TTL 7일) + // 5. Redis 세션 저장 (TTL 7일) saveSession(token, user.getId(), user.getRole().name()); - // 5. 최종 로그인 시각 업데이트 (비동기) + // 6. 최종 로그인 시각 업데이트 (비동기) userService.updateLastLoginAt(user.getId()); - // 6. 응답 반환 + // 7. 응답 반환 return LoginResponse.builder() .token(token) .userId(user.getId()) diff --git a/user-service/src/main/java/com/kt/event/user/service/impl/UserServiceImpl.java b/user-service/src/main/java/com/kt/event/user/service/impl/UserServiceImpl.java index 15ef003..7cae408 100644 --- a/user-service/src/main/java/com/kt/event/user/service/impl/UserServiceImpl.java +++ b/user-service/src/main/java/com/kt/event/user/service/impl/UserServiceImpl.java @@ -103,6 +103,7 @@ public class UserServiceImpl implements UserService { // 6. JWT 토큰 생성 String token = jwtTokenProvider.createAccessToken( savedUser.getId(), + savedStore.getId(), savedUser.getEmail(), savedUser.getName(), List.of(savedUser.getRole().name())