Event Service 개발 환경 구축 및 타입 시스템 개선
주요 변경사항: - UserPrincipal 및 JWT 인증 시스템을 Long에서 UUID로 변경 - Event 엔티티 JPA 설정 최적화 (Lazy loading 및 fetch 전략 개선) - 개발 환경용 DevAuthenticationFilter 추가 (User Service 구현 전까지 임시 사용) - EventServiceApplication 문법 오류 수정 - Hibernate multiple bags 문제 해결 (List를 Set으로 변경) 기술 세부사항: - common/UserPrincipal: Long → UUID 타입 변경, @Builder 어노테이션 추가 - common/JwtTokenProvider: UUID 지원 추가 - event-service/Event: Set 컬렉션 사용, Lazy loading 최적화 - event-service/EventService: Hibernate.initialize()로 컬렉션 초기화 - event-service/EventRepository: fetch join 쿼리 최적화 - event-service/SecurityConfig: DevAuthenticationFilter 통합 테스트 결과: - 모든 Event CRUD API 정상 작동 확인 - PostgreSQL 연결 정상 - 비즈니스 로직 검증 정상 작동 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -12,6 +12,7 @@ import javax.crypto.SecretKey;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* JWT 토큰 생성 및 검증 제공자
|
||||
@@ -55,13 +56,13 @@ public class JwtTokenProvider {
|
||||
* @param roles 역할 목록
|
||||
* @return Access Token
|
||||
*/
|
||||
public String createAccessToken(Long userId, Long storeId, String email, String name, List<String> roles) {
|
||||
public String createAccessToken(UUID userId, UUID storeId, String email, String name, List<String> roles) {
|
||||
Date now = new Date();
|
||||
Date expiryDate = new Date(now.getTime() + accessTokenValidityMs);
|
||||
|
||||
return Jwts.builder()
|
||||
.subject(userId.toString())
|
||||
.claim("storeId", storeId)
|
||||
.claim("storeId", storeId.toString())
|
||||
.claim("email", email)
|
||||
.claim("name", name)
|
||||
.claim("roles", roles)
|
||||
@@ -78,7 +79,7 @@ public class JwtTokenProvider {
|
||||
* @param userId 사용자 ID
|
||||
* @return Refresh Token
|
||||
*/
|
||||
public String createRefreshToken(Long userId) {
|
||||
public String createRefreshToken(UUID userId) {
|
||||
Date now = new Date();
|
||||
Date expiryDate = new Date(now.getTime() + refreshTokenValidityMs);
|
||||
|
||||
@@ -97,9 +98,9 @@ public class JwtTokenProvider {
|
||||
* @param token JWT 토큰
|
||||
* @return 사용자 ID
|
||||
*/
|
||||
public Long getUserIdFromToken(String token) {
|
||||
public UUID getUserIdFromToken(String token) {
|
||||
Claims claims = parseToken(token);
|
||||
return Long.parseLong(claims.getSubject());
|
||||
return UUID.fromString(claims.getSubject());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -111,8 +112,8 @@ public class JwtTokenProvider {
|
||||
public UserPrincipal getUserPrincipalFromToken(String token) {
|
||||
Claims claims = parseToken(token);
|
||||
|
||||
Long userId = Long.parseLong(claims.getSubject());
|
||||
Long storeId = claims.get("storeId", Long.class);
|
||||
UUID userId = UUID.fromString(claims.getSubject());
|
||||
UUID storeId = UUID.fromString(claims.get("storeId", String.class));
|
||||
String email = claims.get("email", String.class);
|
||||
String name = claims.get("name", String.class);
|
||||
@SuppressWarnings("unchecked")
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.kt.event.common.security;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
||||
@@ -8,6 +9,7 @@ import org.springframework.security.core.userdetails.UserDetails;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -15,18 +17,19 @@ import java.util.stream.Collectors;
|
||||
* JWT 토큰에서 추출한 사용자 정보를 담는 객체
|
||||
*/
|
||||
@Getter
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
public class UserPrincipal implements UserDetails {
|
||||
|
||||
/**
|
||||
* 사용자 ID
|
||||
*/
|
||||
private final Long userId;
|
||||
private final UUID userId;
|
||||
|
||||
/**
|
||||
* 매장 ID
|
||||
*/
|
||||
private final Long storeId;
|
||||
private final UUID storeId;
|
||||
|
||||
/**
|
||||
* 사용자 이메일
|
||||
|
||||
Reference in New Issue
Block a user