<aside> 💡 Spring Boot + Gradle Project 내부 소스는 일부러 지웠으므로 복붙으로는 실행되지 않을 수 있습니다.
</aside>
@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/");
}
*/
}
class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()**.antMatchers("/**")**.permitAll()
.and()
.addFilterAfter(**filterSecurityInterceptor()**, FilterSecurityInterceptor.class);
}
}
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);
}
}**
}
}
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