Spring Boot 配置 Swagger2

版权声明:本文为博主原创文章,如需转载请在文章中注明“转载”并在文章开头附上本博客链接。 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)
    }
}

猜你喜欢

转载自blog.csdn.net/soslinken/article/details/85757671