1.导入依赖
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>2.0.7</version>
</dependency>
2.配置swgger2
@Slf4j
@Configuration
@EnableSwagger2WebMvc
public class SwaggerConfig implements WebMvcConfigurer {
@Value("${spring.application.name}")
private String applicationName;
@Bean
public Docket docket() {
// 指定使用Swagger2规范
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(new ApiInfoBuilder()
// 简介(支持Markdown语法)
.description("描述信息xxxxx")
// 服务地址
.termsOfServiceUrl("http://localhost.com/")
// 作者及联系信息
.contact(new Contact("作者", "访问地址", "邮箱"))
// api版本
.version("1.0.0")
.build())
//分组名称(微服务项目可以用微服务名分组)
.groupName(applicationName)
.select()
// 定位api
.apis(
RequestHandlerSelectors.basePackage("com.qy.controller")
.or(RequestHandlerSelectors.withClassAnnotation(RestController.class)
//.or(RequestHandlerSelectors.withClassAnnotation(Controller.class))
)
)
.paths(PathSelectors.any())
.build();
}
}
3.拦截器放行资源
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 对swagger的请求不进行拦截
String[] excludePatterns = new String[]{"/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**",
"/api", "/api-docs", "/api-docs/**", "/doc.html/**"};
registry.addInterceptor(jwtInterceptor())
// 拦截所有请求
.addPathPatterns("/**")
// 排除指定请求
.excludePathPatterns("/verification/**")
.excludePathPatterns(excludePatterns);
}
4.yml中开启knife4j
knife4j:
enable: true
5.日志打印文档地址
@Component
@Slf4j
public class ServerConfig implements ApplicationListener<WebServerInitializedEvent> {
private int serverPort;
public int getServerPort() {
return serverPort;
}
@Override
public void onApplicationEvent(WebServerInitializedEvent webServerInitializedEvent) {
try {
InetAddress localHost = Inet4Address.getLocalHost();
this.serverPort = webServerInitializedEvent.getWebServer().getPort();
log.info("项目启动成功,接口文档地址:"+"http://"+localHost.getHostAddress()+":"+serverPort+"/doc.html");
} catch (UnknownHostException e) {
throw new RuntimeException(e);
}
}
}
补充,如果拦截器还是拦截接口文档请求,可以在拦截器中通过,request.getRequestURI(); 获取拦截的路径,并对其进行放行