如何通过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/n/374028.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
VOIAWVOIAW
上一篇 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

发表回复

登录后才能评论