swagger3 不能傳header未解之謎

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>

然后在啟動(dòng)springboot的啟動(dòng)類增加一個(gè)注解,@EnableOpenApi 就OK了。

不是swagger的問(wèn)題,各種配置也都對(duì),問(wèn)題就在于,參數(shù)名!“Authorization” 這個(gè)header是用來(lái)存認(rèn)證信息的,因?yàn)檫@次做的也正式認(rèn)證接口,認(rèn)證信息從這個(gè)header中獲取。

結(jié)果正常的寫法就無(wú)法獲取這個(gè)header了。

swagger是有通用的或者叫做全局的添加認(rèn)證信息的設(shè)置的,就比如你的接口都需要檢查token就可以給所以的接口設(shè)置統(tǒng)一的token。

具體的開啟如下:

        @Bean
        public Docket createRestApi() {
            
            //返回文檔摘要信息
            return new Docket(DocumentationType.OAS_30)
                    .apiInfo(apiInfo())
                    .select()
                    //.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                    .apis(RequestHandlerSelectors.withMethodAnnotation(Operation.class))
                    .paths(PathSelectors.any())
                    .build()
                    .securitySchemes(securitySchemes())
                    .securityContexts(securityContexts());
                    //.globalRequestParameters(getGlobalRequestParameters());
                    //.globalResponses(HttpMethod.POST, getGlobalResonseMessage());
        }
     
        private List<SecurityScheme> securitySchemes() {
            List<SecurityScheme> securitySchemes = new ArrayList<>();
            securitySchemes.add(new ApiKey("Authorization", "Authorization", "header"));
            return securitySchemes;
        }
     
        private List<SecurityContext> securityContexts() {
            List<SecurityContext> securityContexts = new ArrayList<>();
            securityContexts.add(SecurityContext.builder()
                    .securityReferences(defaultAuth())
                    .forPaths(PathSelectors.regex("^(?!auth).*$")).build());
            return securityContexts;
        }
     
        private List<SecurityReference> defaultAuth() {
            AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
            AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
            authorizationScopes[0] = authorizationScope;
            List<SecurityReference> securityReferences = new ArrayList<>();
            securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
            return securityReferences;
        }

同時(shí)還引出了另一個(gè)問(wèn)題,如果要從header中獲取這個(gè)參數(shù),Authorization。不加注解,swagger也會(huì)自動(dòng)給添加一個(gè)參數(shù)。參數(shù)名正是Authorization,不能用,但是不傳還提示必填。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容