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 的安全性。

相关推荐
qmx_0729 分钟前
HTB-Jerry(tomcat war文件、msfvenom)
java·web安全·网络安全·tomcat
为风而战37 分钟前
IIS+Ngnix+Tomcat 部署网站 用IIS实现反向代理
java·tomcat
技术无疆3 小时前
快速开发与维护:探索 AndroidAnnotations
android·java·android studio·android-studio·androidx·代码注入
罗政5 小时前
[附源码]超简洁个人博客网站搭建+SpringBoot+Vue前后端分离
vue.js·spring boot·后端
架构文摘JGWZ6 小时前
Java 23 的12 个新特性!!
java·开发语言·学习
拾光师6 小时前
spring获取当前request
java·后端·spring
aPurpleBerry6 小时前
neo4j安装启动教程+对应的jdk配置
java·neo4j
我是苏苏7 小时前
Web开发:ABP框架2——入门级别的增删改查Demo
java·开发语言
xujinwei_gingko7 小时前
Spring IOC容器Bean对象管理-Java Config方式
java·spring
2301_789985947 小时前
Java语言程序设计基础篇_编程练习题*18.29(某个目录下的文件数目)
java·开发语言·学习