복붙노트

[SPRING] 스프링 부트에서 swagger-ui를 완전히 비활성화하는 방법 (/ swagger-ui.html은 404를 반환해야 함)

SPRING

스프링 부트에서 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);
}

하지만 ui : localhost : 8080 / swagger-ui.html에 액세스하려고하면 내가 참조

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

해결법

  1. ==============================

    1.내 대답은 앞에서 제시 한 대답과 약간의 차이가 있습니다. 저는 대개 swagger라는 별도의 스프링 프로파일을 만듭니다. Swagger를 사용하려면 응용 프로그램을 시작하는 동안 다음 VM 플래그를 전달하십시오 (-Dspring.profiles.active = swagger). 다음은 내 Swagger 구성의 예입니다.

    내 대답은 앞에서 제시 한 대답과 약간의 차이가 있습니다. 저는 대개 swagger라는 별도의 스프링 프로파일을 만듭니다. Swagger를 사용하려면 응용 프로그램을 시작하는 동안 다음 VM 플래그를 전달하십시오 (-Dspring.profiles.active = swagger). 다음은 내 Swagger 구성의 예입니다.

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

    다음 번에 swagger 프로필없이 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-profile을 사용하지 않고 swagger-ui.html에 액세스하려고하면 404가 표시됩니다.

  2. ==============================

    2.@ EnableSwagger2를 자체 @Configruation으로 외부화하고 속성 또는 프로필을 통해 조건부로로드 할 수 있습니다. 예 :

    @ EnableSwagger2를 자체 @Configruation으로 외부화하고 속성 또는 프로필을 통해 조건부로로드 할 수 있습니다. 예 :

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

    }

    이는 프로덕션이 아닌 모든 프로파일에 대해 서서히 활성화 될 것입니다.

  3. ==============================

    3.컨트롤러 안의 Swagger 주석을 가지고 있지 않다면 ... SwaggerConfig.class와 빌드 의존성을 제외하면됩니다.

    컨트롤러 안의 Swagger 주석을 가지고 있지 않다면 ... SwaggerConfig.class와 빌드 의존성을 제외하면됩니다.

    <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>
    
  4. from https://stackoverflow.com/questions/46454473/how-to-fully-disable-swagger-ui-in-spring-boot-swagger-ui-html-should-return-4 by cc-by-sa and MIT license