SwaggerConfig for springfox on springboot2
package br.com.example.config
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.servlet.ServletContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
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 com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.OAuthBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.AuthorizationScope;
import springfox.documentation.service.ClientCredentialsGrant;
import springfox.documentation.service.GrantType;
import springfox.documentation.service.OAuth;
import springfox.documentation.service.SecurityReference;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger.web.ApiKeyVehicle;
import springfox.documentation.swagger.web.SecurityConfiguration;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Slf4j
@Configuration
@EnableSwagger2
public class SwaggerConfig extends WebMvcConfigurationSupport {
@Value("${api.title}")
public String apiTitle;
@Value("${api.description}")
public String apiDescription;
@Value("${api.version}")
public String apiVersion;
@Value("${api.host}")
public String apiHost;
@Value("${api.protocol}")
public String protocol;
@Value("${security.oauth2.client.scope}")
public String securityScope;
@Value("${security.oauth2.client.client-id}")
public String clientId;
@Value("${security.oauth2.client.client-secret}")
public String clientSecret;
@Autowired
ServletContext servletContext;
public static final String SECURITY_SCHEMA_OAUTH2_CLIENT_CREDENTIALS = "oauth2_client_credentials";
public static final String AUTHORIZATION_SCOPE_GLOBAL_DESC = "accessEverything";
public static final String API_KEY = "Authorization";
public static final String API_KEY_NAME = "Authorization Bearer Token";
public static final String SCOPE_SEPARATOR = "Bearer";
@Bean
public Docket productApi() {
return new Docket(DocumentationType.SWAGGER_2)
.useDefaultResponseMessages(false)
.select()
.apis(RequestHandlerSelectors.basePackage("br.com.sulamerica.susre.auto.molicar.controller"))
.paths(PathSelectors.ant("/restws/v1/auto/molicar/modelos/**"))
.build()
.securitySchemes(Collections.singletonList(securitySchemes()))
.securityContexts(Collections.singletonList(securityContext()))
.pathMapping("/")
.apiInfo(apiInfo())
.host(apiHost);
}
/*
* SecurityConfiguration
@param clientId - client id
@param clientSecret - client secret
@param realm - realm
@param appName - application name
@param apiKey - api key
@param apiKeyVehicle - how the api key is transmitted
@param apiKeyName - name of the api key
@param scopeSeparator - scope separator
*/
@SuppressWarnings("deprecation")
@Bean
public SecurityConfiguration swaggerSecurityConfiguration() { // @formatter:off
return new SecurityConfiguration(
"",
"",
null,
SECURITY_SCHEMA_OAUTH2_CLIENT_CREDENTIALS,
API_KEY,
ApiKeyVehicle.HEADER,
API_KEY_NAME,
SCOPE_SEPARATOR);
}
private ApiInfo apiInfo() { // @formatter:off
return new ApiInfoBuilder()
.title(apiTitle)
.deion(apiDeion)
.version(apiVersion).build();
} // @formatter:on
public OAuth securitySchemes() { // @formatter:off
return new OAuthBuilder()
.name(SECURITY_SCHEMA_OAUTH2_CLIENT_CREDENTIALS)
.grantTypes(grantTypes())
.scopes(Lists.newArrayList(scopes()))
.build();
} // @formatter:on
private SecurityContext securityContext() { // @formatter:off
return SecurityContext
.builder()
.securityReferences(securityRequirements())
.forPaths(PathSelectors.ant("/restws/v1/auto/molicar/modelos/**"))
.build();
} // @formatter:on
private List<GrantType> grantTypes() { // @formatter:off
List<GrantType> grantTypes = new ArrayList<GrantType>();
String authUrl = protocol + apiHost+"/oauth/token";
String authUrlWithoutProtocol = apiHost+"/oauth/token";
log.info("\n\n authUrl = {}\n authUrlWithoutProtocol = {} \n\n",authUrl,authUrlWithoutProtocol);
ClientCredentialsGrant clientCredentialsGrant = new ClientCredentialsGrant(authUrl);
grantTypes.add(clientCredentialsGrant);
return grantTypes;
} // @formatter:on
private List<SecurityReference> securityRequirements() { // @formatter:off
final AuthorizationScope[] authorizationScopes = scopes();
return Lists.newArrayList(new SecurityReference(SECURITY_SCHEMA_OAUTH2_CLIENT_CREDENTIALS, authorizationScopes));
} // @formatter:on
private AuthorizationScope[] scopes() {
final AuthorizationScope authorizationScope = new AuthorizationScope(securityScope,AUTHORIZATION_SCOPE_GLOBAL_DESC);
final AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
return authorizationScopes;
}
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
registry.addResourceHandler("/favicon.ico").addResourceLocations("classpath:/META-INF/resources/");
}
}