如何通過knife4j設置全局token

本文將介紹如何在使用knife4j作為接口文檔管理工具時,通過設置全局token來提高接口文檔的安全性。

一、什麼是knife4j

Knife4j是一款基於springfox的開源的Swagger接口文檔生成工具。它不僅可以將Swagger風格的API文檔轉換成具有可視化界面的文檔,而且可以通過文檔管理和測試接口。

二、為什麼要設置全局token

在應用程序中,對於一些敏感的API接口,需要進行身份驗證。而Swagger2默認情況下不支持token的全局配置,如果我們只是選擇在每個API接口請求時單獨傳遞token,則會增加很多重複代碼,不便於維護。而通過設置全局token,則可以避免這樣的麻煩。

三、如何設置全局token

我們可以通過在Swagger的全局配置中添加一個攔截器,以便在每個請求中都驗證用戶的token。 token的值可以從項目的配置文件中讀取。

1. 新建攔截器

我們可以從Spring的HandlerInterceptor接口開始,新建一個攔截器類TokenInterceptor,然後在preHandle()方法中進行token鑒權校驗,如果token認證失敗,則拋出異常提示用戶。

public class TokenInterceptor extends HandlerInterceptorAdapter {

    private final Logger logger = LoggerFactory.getLogger(TokenInterceptor.class);

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        String token = request.getHeader("token");

        if (StringUtils.isEmpty(token)) {
            logger.warn("Token is empty");
            throw new ServiceException(ResponseCode.UNAUTHORIZED);
        }

        // 鑒權邏輯,如果token不正確,則返回401錯誤
        if (!jwtTokenUtils.validateToken(token)) {
            logger.warn("Token is invalid");
            throw new ServiceException(ResponseCode.UNAUTHORIZED);
        }

        // 鑒權通過,則繼續執行
        return true;
    }
}

2. 註冊攔截器

在Swagger的全局配置類SwaggerConfiguration中,我們可以通過Swagger2的Bean配置方法添加TokenInterceptor攔截器,如下所示:

@Configuration
@EnableSwagger2
public class SwaggerConfiguration {

    @Value("${jwt.secret}")
    private String secret;

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .paths(PathSelectors.any())
                .build().securitySchemes(Collections.singletonList(securityScheme()));
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Swagger API")
                .description("Swagger API")
                .version("1.0")
                .build();
    }

    private SecurityScheme securityScheme() {
        return new ApiKey("token", "token", "header");
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new TokenInterceptor(secret)).excludePathPatterns("/v2/api-docs/**");
    }
}

這裡我們還需要定義一個securityScheme來告訴Swagger以何種方式傳遞token。這裡我們使用header的方式傳遞token。

3. 在應用程序中使用token

在請求Swagger API時,我們需要在請求頭中添加帶有token的鍵值對。如果token鑒權失敗,則Swagger會響應401錯誤。

以下是將token添加到請求頭中的代碼實例:

@RequestMapping(value = "/test", method = RequestMethod.POST)
public Object test(@RequestHeader("token") String token) {
    // 處理請求
}

四、總結

通過設置全局token,我們可以更方便地進行API接口的身份驗證,提高了應用程序的安全性。在使用Knife4j作為接口文檔管理工具時,我們可以通過添加攔截器來驗證用戶的token,並通過Swagger的全局配置進行註冊。在實際應用中,我們只需要在請求頭中傳遞帶有token的鍵值對即可。

原創文章,作者:VOIAW,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/374028.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
VOIAW的頭像VOIAW
上一篇 2025-04-27 15:26
下一篇 2025-04-27 15:26

相關推薦

  • 如何使用HTML修改layui內部樣式影響全局

    如果您想要使用layui來構建一個美觀的網站或應用,您可能需要使用一些自定義CSS來修改layui內部組件的樣式。然而,修改layui組件的樣式可能會對整個頁面產生影響,甚至可能破…

    編程 2025-04-29
  • JWT驗證Token的實現

    本文將從以下幾個方面對JWT驗證Token進行詳細的闡述,包括:JWT概述、JWT驗證Token的意義、JWT驗證Token的過程、JWT驗證Token的代碼實現、JWT驗證Tok…

    編程 2025-04-29
  • C#全局錯誤捕獲

    C#全局錯誤捕獲是指在程序執行過程中遇到異常時,程序能夠自動捕獲並進行處理的機制。該機制可以讓程序員更快地定位和解決錯誤,提高程序的穩定性和可靠性。 一、全局錯誤捕獲的作用 1、提…

    編程 2025-04-27
  • idea全局搜索功能

    在編程開發過程中,快速找到所需的文件、代碼塊和對象標識符對於開發者來說非常重要。JetBrains公司開發的IDEA(IntelliJ IDEA)是一個集成開發環境,被廣泛認為是最…

    編程 2025-04-25
  • webpack全局安裝指南

    一、什麼是webpack全局安裝 Webpack是一個前端資源構建工具,其可以將多個靜態資源(如JavaScript、CSS、HTML、圖片等)打包到一個或多個JavaScript…

    編程 2025-04-25
  • Mac全局搜索快捷鍵

    Mac操作系統下的全局搜索快捷鍵是一個非常方便的工具,可以幫助用戶快速定位到他們想要的文件、應用程序和其他內容。在本文中,我們將從不同的方面闡述這個快捷鍵,並提供相關的代碼示例。 …

    編程 2025-04-25
  • Postman獲取登錄Token指南

    一、前言 在現代互聯網應用中,登錄驗證是不可避免的。本文將有針對性地介紹如何通過Postman獲取登錄Token,以便於用戶在接口測試和開發中快速登錄驗證。 二、新建請求 首先,我…

    編程 2025-04-23
  • npx—再也不用全局安裝包啦!

    一、npx簡介 npx是什麼呢?它是與npm配套使用的一款工具,通常用於臨時安裝npm包並執行命令。實際上,npx並不是一款新的工具,它從npm5.2.0版本開始就內置在npm中了…

    編程 2025-04-22
  • 使用GlobalExceptionHandler進行全局異常處理

    一、什麼是GlobalExceptionHandler? 在開發中,我們經常會遇到各種異常,這些異常可能是因為代碼編寫不夠嚴謹,也可能是外部環境的因素導致的。如果不加以處理,這些異…

    編程 2025-04-13
  • Jsloading:JavaScript的全局加載器

    一、jsloading的概述 jsloading是一個輕量級的JavaScript模塊加載器,它有助於優化網頁的性能。相對於其他的模塊加載器(如RequireJS),jsloadi…

    編程 2025-04-12

發表回復

登錄後才能評論