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와 같은 것입니다.
제 답변은 조금 다른 답변과 비슷합니다.저는 보통 봄 프로파일을 따로 만듭니다.swagger
Swagger를 활성화하려면 응용 프로그램을 시작할 때 다음 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
'programing' 카테고리의 다른 글
심플하고 안전한 API 인증 시스템 (0) | 2023.03.16 |
---|---|
Spring 4.1까지 사용 중인 Jackson Object Mapper를 입수하려면 어떻게 해야 합니까? (0) | 2023.03.16 |
springboot embedded tomcat 및 tomcat- (0) | 2023.03.16 |
스프링 테스트에서 보안되지 않은 URL에 대해 401 반환 (0) | 2023.03.16 |
MongoDB와카산드라 (0) | 2023.03.16 |