Spring Boot 集成 Swagger 并实现认证保护

引言

随着微服务架构的流行,API 文档的重要性日益凸显。Swagger 是一个非常流行的 API 文档生成工具,它能帮助开发者快速生成 RESTful API 的文档,并且提供了一个友好的界面来测试这些 API。本文将介绍如何在 Spring Boot 项目中集成 Swagger,并实现基于 JWT 的认证保护。

准备工作

  1. Spring Boot 项目: 使用 Spring Initializr 创建一个新的 Spring Boot 项目,确保包含 spring-boot-starter-web 和 spring-boot-starter-security 依赖。
  2. Swagger 依赖: 添加 springfox-boot-starter 依赖。
  3. JWT 相关库: 可以使用 jjwt-api 和 jjwt-impl(以及 jjwt-jackson) 来处理 JWT。

添加依赖

在 pom.xml 文件中添加以下依赖:

复制代码
xml

深色版本

复制代码
1<dependencies>
2    <dependency>
3        <groupId>org.springframework.boot</groupId>
4        <artifactId>spring-boot-starter-web</artifactId>
5    </dependency>
6    <dependency>
7        <groupId>org.springframework.boot</groupId>
8        <artifactId>spring-boot-starter-security</artifactId>
9    </dependency>
10    <dependency>
11        <groupId>io.springfox</groupId>
12        <artifactId>springfox-boot-starter</artifactId>
13        <version>3.0.0</version>
14    </dependency>
15    <dependency>
16        <groupId>io.jsonwebtoken</groupId>
17        <artifactId>jjwt-api</artifactId>
18        <version>0.11.2</version>
19    </dependency>
20    <dependency>
21        <groupId>io.jsonwebtoken</groupId>
22        <artifactId>jjwt-impl</artifactId>
23        <version>0.11.2</version>
24    </dependency>
25    <dependency>
26        <groupId>io.jsonwebtoken</groupId>
27        <artifactId>jjwt-jackson</artifactId>
28        <version>0.11.2</version>
29    </dependency>
30</dependencies>

配置 Swagger

创建一个配置类来配置 Swagger:

复制代码
java

深色版本

复制代码
1import springfox.documentation.builders.PathSelectors;
2import springfox.documentation.builders.RequestHandlerSelectors;
3import springfox.documentation.spi.DocumentationType;
4import springfox.documentation.spring.web.plugins.Docket;
5import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
6
7@Configuration
8@EnableSwagger2WebMvc
9public class SwaggerConfig {
10    @Bean
11    public Docket api() {
12        return new Docket(DocumentationType.SWAGGER_2)
13                .select()
14                .apis(RequestHandlerSelectors.basePackage("com.example"))
15                .paths(PathSelectors.any())
16                .build();
17    }
18}

这里我们指定了 Swagger 应该扫描的包名和路径。

实现 JWT 认证

  1. JWT Token 的生成与验证:创建一个工具类来处理 JWT 的生成和解析。

  2. Security 配置:在 Spring Security 中定义 JWT 认证过滤器和认证管理器。

    java

深色版本

复制代码
1import org.springframework.beans.factory.annotation.Autowired;
2import org.springframework.context.annotation.Bean;
3import org.springframework.security.authentication.AuthenticationManager;
4import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
5import org.springframework.security.config.annotation.web.builders.HttpSecurity;
6import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
7import org.springframework.security.config.http.SessionCreationPolicy;
8import org.springframework.security.core.userdetails.UserDetailsService;
9import org.springframework.security.crypto.password.PasswordEncoder;
10
11@Configuration
12@EnableWebSecurity
13public class SecurityConfig extends WebSecurityConfigurerAdapter {
14
15    @Autowired
16    private UserDetailsService userDetailsService;
17
18    @Autowired
19    private PasswordEncoder passwordEncoder;
20
21    @Autowired
22    private JwtTokenProvider jwtTokenProvider;
23
24    @Override
25    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
26        auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder);
27    }
28
29    @Override
30    protected void configure(HttpSecurity http) throws Exception {
31        http.cors().and().csrf().disable()
32            .authorizeRequests()
33            .antMatchers("/api/auth/**").permitAll()
34            .anyRequest().authenticated()
35            .and()
36            .addFilterBefore(new JwtAuthenticationTokenFilter(jwtTokenProvider), UsernamePasswordAuthenticationFilter.class)
37            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
38    }
39
40    @Bean
41    @Override
42    public AuthenticationManager authenticationManagerBean() throws Exception {
43        return super.authenticationManagerBean();
44    }
45}

测试 API

启动应用后,可以通过访问 /swagger-ui.html 来查看和测试你的 API 接口。为了测试认证保护的功能,你需要先通过登录接口获取一个 JWT token,然后在 Swagger UI 的 Authorization 字段中输入 Bearer <token> 来进行授权。

结语

以上就是 Spring Boot 项目中集成 Swagger 并实现基于 JWT 的认证保护的步骤。这种方式不仅能够提高 API 的开发效率,还能够保证 API 的安全性。

相关推荐
想不明白的过度思考者2 小时前
Spring Boot 配置文件深度解析
java·spring boot·后端
第二只羽毛2 小时前
Java图书管理系统的设计与实现
java·大数据·安全·系统安全
cike_y7 小时前
Mybatis之解析配置优化
java·开发语言·tomcat·mybatis·安全开发
WanderInk7 小时前
刷新后点赞全变 0?别急着怪 Redis,这八成是 Long 被 JavaScript 偷偷“改号”了(一次线上复盘)
后端
是一个Bug8 小时前
Java基础50道经典面试题(四)
java·windows·python
Slow菜鸟8 小时前
Java基础架构设计(三)| 通用响应与异常处理(分布式应用通用方案)
java·开发语言
吴佳浩8 小时前
Python入门指南(七) - YOLO检测API进阶实战
人工智能·后端·python
我是Superman丶9 小时前
《Spring WebFlux 实战:基于 SSE 实现多类型事件流(支持聊天消息、元数据与控制指令混合传输)》
java
廋到被风吹走9 小时前
【Spring】常用注解分类整理
java·后端·spring
是一个Bug9 小时前
Java基础20道经典面试题(二)
java·开发语言