diff --git a/stt/src/main/java/com/unicorn/hgzero/stt/config/SecurityConfig.java b/stt/src/main/java/com/unicorn/hgzero/stt/config/SecurityConfig.java index dcd8796..8fa689d 100644 --- a/stt/src/main/java/com/unicorn/hgzero/stt/config/SecurityConfig.java +++ b/stt/src/main/java/com/unicorn/hgzero/stt/config/SecurityConfig.java @@ -1,8 +1,5 @@ package com.unicorn.hgzero.stt.config; -import com.unicorn.hgzero.common.security.JwtTokenProvider; -import com.unicorn.hgzero.common.security.filter.JwtAuthenticationFilter; -import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -11,7 +8,6 @@ import org.springframework.security.config.annotation.web.configuration.EnableWe import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.web.SecurityFilterChain; -import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; @@ -20,15 +16,12 @@ import java.util.Arrays; /** * Spring Security 설정 - * JWT 기반 인증 및 API 보안 설정 + * CORS 설정 및 API 보안 설정 (인증 없음) */ @Configuration @EnableWebSecurity -@RequiredArgsConstructor public class SecurityConfig { - private final JwtTokenProvider jwtTokenProvider; - @Value("${cors.allowed-origins:http://localhost:3000,http://localhost:8080,http://localhost:8081,http://localhost:8082,http://localhost:8083,http://localhost:8084}") private String allowedOrigins; @@ -39,19 +32,9 @@ public class SecurityConfig { .cors(cors -> cors.configurationSource(corsConfigurationSource())) .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) .authorizeHttpRequests(auth -> auth - // Actuator endpoints - .requestMatchers("/actuator/**").permitAll() - // Swagger UI endpoints - context path와 상관없이 접근 가능하도록 설정 - .requestMatchers("/swagger-ui/**", "/swagger-ui.html", "/v3/api-docs/**", "/swagger-resources/**", "/webjars/**").permitAll() - // Health check - .requestMatchers("/health").permitAll() - // WebSocket endpoints - .requestMatchers("/ws/**").permitAll() - // All other requests require authentication - .anyRequest().authenticated() + // 모든 요청 허용 (인증 없음) + .anyRequest().permitAll() ) - .addFilterBefore(new JwtAuthenticationFilter(jwtTokenProvider), - UsernamePasswordAuthenticationFilter.class) .build(); } diff --git a/stt/src/main/java/com/unicorn/hgzero/stt/dto/RecordingDto.java b/stt/src/main/java/com/unicorn/hgzero/stt/dto/RecordingDto.java index 0c6ddbb..1894119 100644 --- a/stt/src/main/java/com/unicorn/hgzero/stt/dto/RecordingDto.java +++ b/stt/src/main/java/com/unicorn/hgzero/stt/dto/RecordingDto.java @@ -1,8 +1,8 @@ package com.unicorn.hgzero.stt.dto; -import lombok.Builder; -import lombok.Getter; -import lombok.ToString; +import lombok.*; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; @@ -16,26 +16,33 @@ import java.time.LocalDateTime; * 녹음 관련 DTO 클래스들 */ public class RecordingDto { - + /** * 녹음 준비 요청 DTO */ @Getter @Builder @ToString + @NoArgsConstructor(access = AccessLevel.PRIVATE, force = true) + @AllArgsConstructor(access = AccessLevel.PRIVATE) + @JsonDeserialize(builder = PrepareRequest.PrepareRequestBuilder.class) public static class PrepareRequest { - + @NotBlank(message = "회의 ID는 필수입니다") private final String meetingId; - + @NotBlank(message = "세션 ID는 필수입니다") private final String sessionId; - + private final String language; - + @Min(value = 1, message = "참석자 수는 1명 이상이어야 합니다") @Max(value = 50, message = "참석자 수는 50명을 초과할 수 없습니다") private final Integer attendeeCount; + + @JsonPOJOBuilder(withPrefix = "") + public static class PrepareRequestBuilder { + } } /** @@ -59,12 +66,19 @@ public class RecordingDto { @Getter @Builder @ToString + @NoArgsConstructor(access = AccessLevel.PRIVATE, force = true) + @AllArgsConstructor(access = AccessLevel.PRIVATE) + @JsonDeserialize(builder = StartRequest.StartRequestBuilder.class) public static class StartRequest { - + @NotBlank(message = "시작자 ID는 필수입니다") private final String startedBy; - + private final String recordingMode; + + @JsonPOJOBuilder(withPrefix = "") + public static class StartRequestBuilder { + } } /** @@ -73,12 +87,19 @@ public class RecordingDto { @Getter @Builder @ToString + @NoArgsConstructor(access = AccessLevel.PRIVATE, force = true) + @AllArgsConstructor(access = AccessLevel.PRIVATE) + @JsonDeserialize(builder = StopRequest.StopRequestBuilder.class) public static class StopRequest { - + @NotBlank(message = "중지자 ID는 필수입니다") private final String stoppedBy; - + private final String reason; + + @JsonPOJOBuilder(withPrefix = "") + public static class StopRequestBuilder { + } } /**