๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Spring Boot/๊ฐœ๋ฐœ ๊ธฐ๋ก

Spring Boot์™€ Spring Security ํ”„๋กœ์ ํŠธ์— Swagger ์ ์šฉํ•˜๊ธฐ

by oliviarla 2022. 6. 10.

์ด๊ธ€์˜ ๋ชฉ์ ์€ ํ”„๋กœ์ ํŠธ API ๊ฐœ๋ฐœ์„ ์–ด๋А์ •๋„ ๋งˆ์น˜๊ณ  Swagger๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ ์šฉํ•˜๊ธฐ์— ์•ž์„œ ์ด ํ”„๋กœ์ ํŠธ๋Š” Spring Boot 2.6.2์™€ Spring Security๊ฐ€ ์ ์šฉ๋˜์—ˆ๋‹ค.

 

1. build.gradle์— ์˜์กด์„ฑ ์ถ”๊ฐ€

//for Swagger
implementation group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2'
implementation group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2'

 

2. SwaggerConfig ํด๋ž˜์Šค ์ƒ์„ฑ

config ํŒจํ‚ค์ง€ ๋‚ด์— SwaggerConfig ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•ด์ค€ ๋’ค ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

 

- api() ๋ฉ”์†Œ๋“œ์˜ apis()์—๋Š” ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์˜ ํŒจํ‚ค์ง€ ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

- apiInfoMetaData() ๋ฉ”์†Œ๋“œ์—์„œ๋Š” Swagger ui์—์„œ ๋ณด์—ฌ์งˆ ํƒ€์ดํ‹€, ์„ค๋ช… ์ •๋ณด๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

package com.teamk.laube.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig extends WebMvcConfigurationSupport {

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

    private ApiInfo apiInfoMetaData() {

        return new ApiInfoBuilder().title("NAME OF SERVICE")
                .description("API Endpoint Decoration")
                .contact(new Contact("Dev-Team", "https://www.dev-team.com/", "dev-team@gmail.com"))
                .license("Apache 2.0")
                .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html")
                .version("1.0.0")
                .build();
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
        super.addResourceHandlers(registry);
    }
}

 

๐Ÿ˜ต‍๐Ÿ’ซ ๋ฐœ์ƒํ–ˆ๋˜ ์—๋Ÿฌ
๋จผ์ € ์ฒ˜์Œ์— ์ฝ”๋“œ ์ž‘์„ฑํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ๋Š” EnableSwagger2 ์–ด๋…ธํ…Œ์ด์…˜์—์„œ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ์˜€๋‹ค.
๊ณ„์†ํ•ด์„œ NullPointerException์ด ๋ฐœ์ƒํ•˜์˜€๊ณ , EnableSwagger2 ๋Œ€์‹  EnableWebMVC ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•ด๋ดค์ง€๋งŒ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜๊ณ , WebMvcConfigurationSupport ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ํ›„ addResourceHandlers ๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ–ˆ๋”๋‹ˆ Exception์ด ํ•ด๊ฒฐํ•˜์˜€๋‹ค!

 

3. Spring Security๋ฅผ ์‚ฌ์šฉ์ค‘์ด๋ผ๋ฉด ๊ฒฝ๋กœ ๊ถŒํ•œ ๋ถ€์—ฌํ•˜๊ธฐ

SecurityConfig ํด๋ž˜์Šค์— ๋“ค์–ด๊ฐ€ ๊ถŒํ•œ ํ—ˆ์šฉ์„ ํ•ด์ค€๋‹ค.

.antMatchers(
    "/swagger-resources/**",
    "/swagger-ui.html",
    "/v2/api-docs",
    "/webjars/**",)
.permitAll()

 

๊ตฌ๊ธ€๋ง์„ ํ•˜๋‹ค๋ณด๋‹ˆ swagger-ui.html์œผ๋กœ ์ ‘์†ํ•ด์•ผ ํ•  ์ง€ swagger-ui/index.html์œผ๋กœ ์ ‘์†ํ•ด์•ผ ํ•  ์ง€ ๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— swagger-ui 404 ์—๋Ÿฌ๊ฐ€ ์ข…์ข… ๋ฐœ์ƒํ•œ๋‹ค.

 

์•ˆ์ •์ ์œผ๋กœ 2.9.2๋ฒ„์ „์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด localhost:8080/swagger-ui.html ๋กœ ์ ‘๊ทผํ•˜๋ฉด ์—๋Ÿฌ์—†์ด swagger ํŽ˜์ด์ง€๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

์ถœ์ฒ˜

https://velog.io/@gillog/Error-Swagger-2.9.2-swagger-ui.html-%EC%97%B4%EB%A6%AC%EC%A7%80-%EC%95%8A%EC%9D%84%EB%95%8C-%ED%95%B4%EA%B2%B0

๋Œ“๊ธ€