使用Spring Boot和Swagger UI设置JWT

2023/05/12

1. 简介

在这个简短的教程中,我们将了解如何配置Swagger UI以在它调用我们的API时包含JSON Web Token(JWT)。

2. Maven依赖

在这个例子中,我们将使用springfox-boot-starter,它包括开始使用Swagger和Swagger UI所需的所有依赖项,让我们将它添加到我们的 pom.xml文件中:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>

3. Swagger配置

首先,我们需要定义我们的ApiKey以将JWT作为authorization标头包含在内:

private ApiKey apiKey() { 
    return new ApiKey("JWT", "Authorization", "header"); 
}

接下来,让我们使用全局AuthorizationScope配置JWT SecurityContext:

private SecurityContext securityContext() { 
    return SecurityContext.builder().securityReferences(defaultAuth()).build(); 
} 

private List<SecurityReference> defaultAuth() { 
    AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); 
    AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; 
    authorizationScopes[0] = authorizationScope; 
    return Arrays.asList(new SecurityReference("JWT", authorizationScopes)); 
}

然后,我们将API Docket bean配置为包含API信息、安全上下文和安全方案:

@Bean
public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)
        .apiInfo(apiInfo())
        .securityContexts(Arrays.asList(securityContext()))
        .securitySchemes(Arrays.asList(apiKey()))
        .select()
        .apis(RequestHandlerSelectors.any())
        .paths(PathSelectors.any())
        .build();
}
private ApiInfo apiInfo() {
    return new ApiInfo(
        "My REST API",
        "Some custom description of API.",
        "1.0.0",
        "Terms of service",
        new Contact("Tuyuchengn", "www.tuyucheng.com", "tuyucheng@gmail.com"),
        "License of API",
        "API license URL",
        Collections.emptyList());
}

4. RestController

在我们的ClientsRestController中,让我们编写一个简单的getClients端点来返回客户端列表:

@RestController(value = "/clients")
@Api( tags = "Clients")
public class ClientsRestController {

    @ApiOperation(value = "This method is used to get the clients.")
    @GetMapping
    public List<String> getClients() {
        return Arrays.asList("First Client", "Second Client");
    }
}

5. Swagger的用户界面

现在,当我们启动应用程序时,我们可以通过http://localhost:8080/swagger-ui/访问Swagger UI。

以下是带有Authorize按钮的Swagger UI:

当我们点击Authorize按钮时,Swagger UI将请求我们输入JWT。

我们只需要输入我们的令牌并单击Authorize,从此之后,对我们API发出的所有请求将自动在HTTP标头中包含令牌:

6. 使用JWT的API请求

当向我们的API发送请求时,我们可以看到有一个带有令牌值的“Authorization”标头:

7. 总结

在本文中,我们了解了Swagger UI如何提供自定义配置来设置JWT,这在处理我们的应用程序授权时会很有帮助。在Swagger UI中授权后,所有的请求都会自动包含我们的JWT。

与往常一样,本教程的完整源代码可在GitHub上获得。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章