package com.lxzn.config;
|
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Configuration;
|
import springfox.documentation.builders.ApiInfoBuilder;
|
import springfox.documentation.builders.OAuthBuilder;
|
import springfox.documentation.builders.PathSelectors;
|
import springfox.documentation.builders.RequestHandlerSelectors;
|
import springfox.documentation.service.*;
|
import springfox.documentation.spi.DocumentationType;
|
import springfox.documentation.spi.service.contexts.SecurityContext;
|
import springfox.documentation.spring.web.plugins.Docket;
|
import springfox.documentation.swagger2.annotations.EnableSwagger2;
|
|
import java.util.Arrays;
|
import java.util.Collections;
|
|
/**
|
* @author joetao
|
* swagger相关配置类
|
*/
|
@EnableSwagger2
|
@Configuration
|
public class SwaggerConfig {
|
|
//这个东西是项目的根路径,也就是“/oauth/token”前面的那一串
|
//这个东西在配置文件里写的,大家也可以直接写死在配置文件中
|
@Value("${auth_server}")
|
private String AUTH_SERVER;
|
|
private Contact contact = new Contact("灵秀智能",AUTH_SERVER + "/swagger-ui.html", "zhangherong@xalxzn.com");
|
|
/**
|
* 主要是这个方法,其他的方法是抽出去的,所以大家不要害怕为啥有这么多方法
|
* 在 basePackage 里面写需要生成文档的 controller 路径
|
*/
|
@Bean
|
public Docket api() {
|
return new Docket(DocumentationType.SWAGGER_2)
|
.select()
|
.apis(RequestHandlerSelectors.basePackage("com.lxzn"))
|
.paths(PathSelectors.any())
|
.build()
|
.apiInfo(apiInfo())
|
.securitySchemes(Collections.singletonList(securityScheme()))
|
.securityContexts(Collections.singletonList(securityContext()));
|
}
|
|
private ApiInfo apiInfo() {
|
return new ApiInfoBuilder()
|
.title("灵秀智能API文档 v1.0")
|
.description("灵秀智能API文档")
|
.contact(contact)
|
.version("1.0")
|
.build();
|
}
|
|
/**
|
* 这个类决定了你使用哪种认证方式,我这里使用密码模式
|
* 其他方式自己摸索一下,完全莫问题啊
|
*/
|
private SecurityScheme securityScheme() {
|
GrantType grantType = new ResourceOwnerPasswordCredentialsGrant(AUTH_SERVER + "/oauth/token");
|
|
return new OAuthBuilder()
|
.name("spring_oauth")
|
.grantTypes(Collections.singletonList(grantType))
|
.scopes(Arrays.asList(scopes()))
|
.build();
|
}
|
|
/**
|
* 这里设置 swagger2 认证的安全上下文
|
*/
|
private SecurityContext securityContext() {
|
return SecurityContext.builder()
|
.securityReferences(Collections.singletonList(new SecurityReference("spring_oauth", scopes())))
|
.forPaths(PathSelectors.any())
|
.build();
|
}
|
|
/**
|
* 这里是写允许认证的scope
|
*/
|
private AuthorizationScope[] scopes() {
|
return new AuthorizationScope[]{
|
new AuthorizationScope("all", "All scope is trusted!")
|
};
|
}
|
}
|