From a822fa3e0b8a64c269de58178eee2f7dfd82f3aa Mon Sep 17 00:00:00 2001 From: Jaeyoung Lee Date: Thu, 4 Jul 2024 16:25:23 +0900 Subject: [PATCH] =?UTF-8?q?swagger=20ui=20=EC=B6=94=EA=B0=80.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 6 ++++ .../com/interplug/qcast/QCastApplication.java | 3 -- .../qcast/config/jasypt/JasyptConfig.java | 4 +-- .../qcast/config/security/SecurityConfig.java | 10 +++--- .../qcast/config/swagger/SwaggerConfig.java | 36 +++++++++++++++++++ src/main/resources/config/application.yml | 17 ++++----- 6 files changed, 57 insertions(+), 19 deletions(-) create mode 100644 src/main/java/com/interplug/qcast/config/swagger/SwaggerConfig.java diff --git a/pom.xml b/pom.xml index 5ac52c73..50f7ffb8 100644 --- a/pom.xml +++ b/pom.xml @@ -92,6 +92,12 @@ true + + org.springdoc + springdoc-openapi-starter-webmvc-ui + 2.6.0 + + diff --git a/src/main/java/com/interplug/qcast/QCastApplication.java b/src/main/java/com/interplug/qcast/QCastApplication.java index bebb8462..c524a7ef 100644 --- a/src/main/java/com/interplug/qcast/QCastApplication.java +++ b/src/main/java/com/interplug/qcast/QCastApplication.java @@ -1,13 +1,10 @@ package com.interplug.qcast; -import com.interplug.qcast.config.jasypt.JasyptConfig; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.context.annotation.Import; @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) -@Import({JasyptConfig.class}) public class QCastApplication { public static void main(String[] args) { diff --git a/src/main/java/com/interplug/qcast/config/jasypt/JasyptConfig.java b/src/main/java/com/interplug/qcast/config/jasypt/JasyptConfig.java index f323be58..a6df7494 100644 --- a/src/main/java/com/interplug/qcast/config/jasypt/JasyptConfig.java +++ b/src/main/java/com/interplug/qcast/config/jasypt/JasyptConfig.java @@ -4,8 +4,8 @@ import org.jasypt.encryption.StringEncryptor; import org.jasypt.encryption.pbe.PooledPBEStringEncryptor; import org.jasypt.encryption.pbe.StandardPBEStringEncryptor; import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig; -import org.springframework.beans.factory.annotation.Configurable; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; /** * @@ -16,7 +16,7 @@ import org.springframework.context.annotation.Bean; * * @author KimYoungHyun (youngh.kim@kt.com) */ -@Configurable +@Configuration public class JasyptConfig { private static final String KEY = "qcast_jasypt_key"; diff --git a/src/main/java/com/interplug/qcast/config/security/SecurityConfig.java b/src/main/java/com/interplug/qcast/config/security/SecurityConfig.java index 60cf0414..1f871703 100644 --- a/src/main/java/com/interplug/qcast/config/security/SecurityConfig.java +++ b/src/main/java/com/interplug/qcast/config/security/SecurityConfig.java @@ -14,7 +14,9 @@ import org.springframework.security.web.SecurityFilterChain; @Configuration @EnableWebSecurity public class SecurityConfig { - private static final String[] WHITELIST = {"/api/login/**", "/act/**"}; + private static final String[] WHITELIST = { + "/api/login/**", "/swagger-ui/**", "/v3/api-docs/**", "/actuator/**" + }; @Bean public AuthenticationManager authenticationManager( @@ -31,11 +33,7 @@ public class SecurityConfig { .cors(Customizer.withDefaults()) .authorizeHttpRequests( authorize -> - authorize - .requestMatchers("/api/login/**", "/act/**") - .permitAll() - .anyRequest() - .authenticated()); + authorize.requestMatchers(WHITELIST).permitAll().anyRequest().authenticated()); return httpSecurity.build(); } diff --git a/src/main/java/com/interplug/qcast/config/swagger/SwaggerConfig.java b/src/main/java/com/interplug/qcast/config/swagger/SwaggerConfig.java new file mode 100644 index 00000000..fcd7bf32 --- /dev/null +++ b/src/main/java/com/interplug/qcast/config/swagger/SwaggerConfig.java @@ -0,0 +1,36 @@ +package com.interplug.qcast.config.swagger; + +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springdoc.core.models.GroupedOpenApi; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; + +@Configuration +@RequiredArgsConstructor +@Slf4j +public class SwaggerConfig { + + @Autowired Environment env; + + @Bean + public OpenAPI baseApi() { + String activeProfile = env.getProperty("spring.profiles.active"); + if (log.isDebugEnabled()) { + log.debug("Active profile: {}", activeProfile); + } + OpenAPI openAPI = new OpenAPI(); + openAPI.info( + new Info().title("QCast API").version("1.0").description("QCast API Documentation")); + return openAPI; + } + + @Bean + public GroupedOpenApi allApi() { + return GroupedOpenApi.builder().group("ALL").packagesToScan("com.interplug.qcast.biz").build(); + } +} diff --git a/src/main/resources/config/application.yml b/src/main/resources/config/application.yml index 3d8c0e9d..d82f3060 100644 --- a/src/main/resources/config/application.yml +++ b/src/main/resources/config/application.yml @@ -28,6 +28,8 @@ spring: maximum-pool-size: 4 pool-name: Read-HikariPool # connection-test-query: SELECT 2 + jackson: + time-zone: Asia/Seoul management: endpoints: @@ -37,14 +39,9 @@ management: exclude: - "*" web: - base-path: /act exposure: - include: - - info - - health - exclude: - - env - - beans + include: "*" + exclude: "env,beans" endpoint: info: enabled: true @@ -53,4 +50,8 @@ management: # log logging: - config: classpath:logback/logback-${spring.profiles.active:local}.xml \ No newline at end of file + config: classpath:logback/logback-${spring.profiles.active:local}.xml + +springdoc: + swagger-ui: + operations-sorter: alpha