programing

spring-boot에서 swagger-ui를 완전히 비활성화하는 방법(/swagger-ui.html은 404를 반환해야 함

yellowcard 2023. 3. 16. 21:16
반응형

spring-boot에서 swagger-ui를 완전히 비활성화하는 방법(/swagger-ui.html은 404를 반환해야 함

다음 토픽을 읽었습니다.Spring MVC에서의 Swagger 비활성화

이렇게 썼습니다.

@Bean
public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.project.name.controller"))
            .paths(PathSelectors.ant("/api/**"))
            .build()
            .apiInfo(apiInfo())
            .enable(false);
}

그러나 swagger ui에 접속하려고 하면:localhost:8080/swagger-ui.html
그렇구나

정확하지 않은 것 같아요.이 URL을 완전히 비활성화할 수 있습니까? 예를 들어 404와 같은 것입니다.

제 답변은 조금 다른 답변과 비슷합니다.저는 보통 봄 프로파일을 따로 만듭니다.swaggerSwagger를 활성화하려면 응용 프로그램을 시작할 때 다음 VM 플래그를 전달합니다.-Dspring.profiles.active=swagger여기 스웨거 구성의 예가 있습니다.

@Profile(value = {"swagger"})
@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
    ...
}

다음에 접속을 시도할 때swagger-ui.html없이.swagger프로파일은 404가 아닌 빈 스웨거 화면이 나타납니다.

여기에 이미지 설명 입력

정적 Swagger UI 페이지를 전혀 로드하고 싶지 않은 경우 다음과 같이 간단한 컨트롤러를 작성할 수 있습니다.

@Profile("!swagger")
@RestController
@Slf4j
public class DisableSwaggerUiController {

    @RequestMapping(value = "swagger-ui.html", method = RequestMethod.GET)
    public void getSwagger(HttpServletResponse httpResponse) throws IOException {
        httpResponse.setStatus(HttpStatus.NOT_FOUND.value());
    }
}

이제 접속을 시도하면swagger-ui.html없이.swagger프로파일, 404를 얻을 수 있습니다.

swagger 3.0.0 버전에서는springfox.documentation.enabled=false대응하는 환경 프로파일로application.properties예를 들어, 이 파일을 추가했습니다.application-prod.properties운영 환경에서 사용하지 않도록 설정하려면(앱을 실행하는 동안 다음과 같은 VM arg를 사용하여 프로파일을 지정해야 합니다).-Dspring.profiles.active=prod)

외부화할 수 있습니다.@EnableSwagger2그 자체로@Configruation속성 또는 프로파일을 통해 조건부로 로드합니다.

@Profile("!production")
@Configuration
@EnableSwagger2
public class SwaggerConfiguration{
    //Additional Swagger Beans

}

생산적이지 않은 프로파일에 대해 스웨거가 활성화될 겁니다

@Hayden의 답변에 덧붙여 (코멘트할 포인트가 부족합니다)

springdoc 매뉴얼에 따르면 다음 속성을 사용하여 springdoc api 엔드포인트와 swagger-ui를 모두 비활성화할 수 있습니다.

https://springdoc.org/ #spring-doc-openapi-http://https://springdoc.org/

# Disabling the /v3/api-docs endpoint
springdoc.api-docs.enabled=false

https://springdoc.org/ #the-valui

# Disabling the swagger-ui
springdoc.swagger-ui.enabled=false

컨트롤러 내부에 스웨거 주석이 없으면...SwaggerConfig.class 및 swaggher 의존관계를 제외하기만 하면 됩니다.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>com/company/app/SwaggerConfig.java</exclude>
                </excludes>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <excludes>
                    <exclude>
                        <groupId>io.springfox</groupId>
                        <artifactId>springfox-swagger-ui</artifactId>
                    </exclude>
                    <exclude>
                        <groupId>io.springfox</groupId>
                        <artifactId>springfox-swagger2</artifactId>
                    </exclude>
                </excludes>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

SpringDoc 사용자의 경우 이 항목을application.properties

springdoc.api-docs.enabled=false

Swagger를 비활성화하려면prod프로파일이 활성화되어 있습니다.application-prod.properties대신

코드 gen을 사용하는 사용자의 경우:

@Controller
@Profile({"dev", "staging"})
public class HomeController {
    @RequestMapping(value = "/")
    public String index() {
        System.out.println("swagger-ui.html");
        return "redirect:swagger-ui.html";
    }
}

또한 파일을 .swagger-codegen-ignore에 추가합니다.그렇지 않으면 다음 maven 빌드에서 변경 내용을 덮어씁니다.

springdoc-openapi-ui 의존관계를 사용하는 경우 다음 속성을 통해 swagger-ui를 비활성화할 수 있습니다.

springdoc.swagger-ui.enabled=false

Spring Doc FAQ에 기재되어 있습니다.

스프링 부트의 최신 버전에서는, 이것을 application.yml 에 추가할 수 있습니다.

springdoc:
  swagger-ui:
    enabled: false
  api-docs:
    enabled: false

swagger-ui 키는 swagger 인터페이스를 비활성화하기 위해 사용되며 api-docs 키는 API를 설명하는 JSON이 서비스되는 경로를 비활성화하기 위해 사용됩니다.

설정에는 이러한 행을 포함한 application-prod.yml을 읽어내는 prod 프로파일이 있습니다.

종속성을 제거하기만 하면 됩니다.

<!--<dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
</dependency>-->

컴파일에는 영향을 주지 않습니다.

언급URL : https://stackoverflow.com/questions/46454473/how-to-fully-disable-swagger-ui-in-spring-boot-swagger-ui-html-should-return-4

반응형