<aside> 💡 Spring Boot + Gradle Project 내부 소스는 일부러 지웠으므로 복붙으로는 실행되지 않을 수 있습니다.

</aside>

Swagger 기본 세팅

@Configuration
**@EnableSwagger2
/*** Spring boot가 없는 경우 @EnableWebMvc 추가 */
**@Profile({"local","dev"})**
public class SwaggerConfig extends WebMvcConfigurerAdapter {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
**								[.apiInfo(getApiInfo())**](<http://localhost:8080/swagger-ui.html>)
                .select()
                [**.apis(RequestHandlerSelectors.any())](<http://localhost:8080/swagger-ui.html>)
                .paths(PathSelectors.any())**
                .build();

    }
		private ApiInfo getApiInfo() {
        return new ApiInfoBuilder()
                .title("Storelink.pugshop API")
                .description("springfox-swagger-ui version: 2.9.2\\n" + 
                		"springfox-swagger2 version: 2.9.2")
                .contact(new Contact("Development Team", "<https://storelink.io/>", "[email protected]"))
                .version("1.0")
                .build();
    }
/* 
		Spring boot가 없는 경우 
    @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/");
    }
*/

}

*Spring Security가 적용되어 있는 상황

class SecurityConfig extends WebSecurityConfigurerAdapter {
	@Override
	protected void configure(HttpSecurity http) throws Exception {
	  http.csrf().disable()
	  
	      .authorizeRequests()**.antMatchers("/**")**.permitAll()

	  .and()
		.addFilterAfter(**filterSecurityInterceptor()**, FilterSecurityInterceptor.class);
	}
}

*Filter가 적용되어 있는 상황

class FilterMetadataSource implements FilterInvocationSecurityMetadataSource, InitializingBean {
	@Override
	public Collection<ConfigAttribute> getAttributes(Object object) throws IllegalArgumentException {
	   
	
	    **if(url.startsWith("/swagger-resources/configuration/ui") || url.startsWith("/swagger-resources/configuration/security") || url.startsWith("/swagger-resources") || url.startsWith("/v2/api-docs") || url.startsWith("/swagger") || url.startsWith("/v2/api-docs") || url.startsWith("/favicon.ico") || url.startsWith("/webjars/")) {
	  	  //Swagger url 은 확인하지 않도록 작성
	    } else {
	  	  if(matchedResourceRole.size() < 1) {
	  		String[] stockArr = new String[] {"UNCATEGORIZED_URL"};
	          return SecurityConfig.createList(stockArr);
	      }
	    }**
	
	}
}

build.gradle

https://mvnrepository.com/artifact/io.springfox/springfox-boot-starter/3.0.0

compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2'
compile group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2'
//compile group: 'io.springfox', name: 'springfox-boot-starter', version: '3.0.0'

참고자료 https://recordsoflife.tistory.com/26 https://springfox.github.io/springfox/docs/current/#gradle-2