版权声明:本文为博主原创文章,如需转载请在文章中注明“转载”并在文章开头附上本博客链接。 https://blog.csdn.net/soslinken/article/details/85757671
前言
因为在Spring boot 中使用了拦截器,拦截请求,并做监权,所以Swagger 的URL 也会进入拦截器。
一旦进入,就造成了没有办法访问swagger2 生成的doc文档。
配置Swagger
Gradle 依赖配置
implementation 'io.springfox:springfox-swagger2:2.9.2'
implementation 'io.springfox:springfox-swagger-ui:2.9.2'
JavaConfig 增加JWT 配置
@Configuration
class Swagger2 {
@Bean
fun createRestApi() : Docket {
return Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("org.unreal.sr.server.controller"))
.paths(PathSelectors.any())
.build()
.securitySchemes(listOf(apiKey())) //配置Authorization 中填写的token位置以及参数
.securityContexts(securityContexts()) //配置Authorization 在请求时携带的位置以及内容参数
}
private fun securityContexts():List<SecurityContext> {
return listOf(SecurityContext.builder()
.securityReferences(defaultAuth())
.forPaths(PathSelectors.regex("^(?!login).*$")) // 不包含 login 的请求加 Authorization 信息
.build())
}
private fun defaultAuth(): List<SecurityReference> {
val authorizationScope = AuthorizationScope("global", "accessEverything"); //所有请求都使用全局配置的Authorization,不需要额外单独配置
val authorizationScopes = listOf(authorizationScope)
return listOf(SecurityReference("Authorization", authorizationScopes.toTypedArray()))
}
private fun apiInfo() : ApiInfo {
return ApiInfoBuilder()
.title("xxxxx")
.description("xxxxxx项目RESTFul测试")
.version("1.0")
.build()
}
private fun apiKey(): ApiKey {
return ApiKey("Authorization", "token", "header")
}
}
拦截器放行
@Configuration
class WebConfig : WebMvcConfigurer {
override fun addInterceptors(registry: InterceptorRegistry) {
registry.addInterceptor(TokenInterceptor()).addPathPatterns("/**")
.excludePathPatterns("/users/login")
.excludePathPatterns("/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**");
super.addInterceptors(registry)
}
}