当前位置: 首页 > news >正文

使用Spring Boot和Spring Security构建安全的RESTful API

使用Spring Boot和Spring Security构建安全的RESTful API

引言

在现代Web开发中,安全性是构建应用程序时不可忽视的重要方面。本文将介绍如何使用Spring Boot和Spring Security框架构建一个安全的RESTful API,并结合JWT(JSON Web Token)实现身份验证与授权。

技术栈

  • 核心框架: Spring Boot, Spring Security
  • 身份验证: JWT
  • 数据库: H2 (用于演示)
  • 构建工具: Maven

项目初始化

首先,我们需要创建一个Spring Boot项目。可以通过Spring Initializr快速生成项目骨架。以下是pom.xml中的关键依赖:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.11.5</version></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-impl</artifactId><version>0.11.5</version><scope>runtime</scope></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-jackson</artifactId><version>0.11.5</version><scope>runtime</scope></dependency><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency>
</dependencies>

配置Spring Security

Spring Security提供了强大的安全功能。我们需要自定义安全配置以支持JWT。

@Configuration
@EnableWebSecurity
public class SecurityConfig {@Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {http.csrf().disable().authorizeHttpRequests(auth -> auth.requestMatchers("/api/auth/**").permitAll().anyRequest().authenticated()).sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)).addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);return http.build();}@Beanpublic JwtAuthenticationFilter jwtAuthenticationFilter() {return new JwtAuthenticationFilter();}
}

实现JWT身份验证

JWT是一种轻量级的身份验证机制。我们需要实现以下功能:

  1. 生成Token
  2. 验证Token
  3. 解析Token

以下是生成Token的示例代码:

public String generateToken(UserDetails userDetails) {Map<String, Object> claims = new HashMap<>();return Jwts.builder().setClaims(claims).setSubject(userDetails.getUsername()).setIssuedAt(new Date(System.currentTimeMillis())).setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 10)).signWith(SignatureAlgorithm.HS256, "secret").compact();
}

测试API

使用Postman或类似的工具测试API。首先调用/api/auth/login获取Token,然后在其他请求的Header中添加Authorization: Bearer <token>

总结

本文详细介绍了如何使用Spring Boot和Spring Security构建安全的RESTful API,并结合JWT实现身份验证与授权。通过实际代码示例,帮助开发者快速上手。

完整的项目代码可以在GitHub上找到。

相关文章:

  • 密文搜索-map容器+substr
  • Python爬虫(29)Python爬虫高阶:动态页面处理与云原生部署全链路实践(Selenium、Scrapy、K8s)
  • 利用SenseGlove触觉手套开发XR手术训练体验
  • 数据结构【AVL树】
  • AIGC在电商行业的应用:革新零售体验
  • MinIO深度解析:从入门到实战——对象存储系统全指南
  • exit耗时高
  • STM32中的DMA
  • Vue3学习(组合式API——父、子组件间通信详解)
  • C++学习:六个月从基础到就业——C++11/14:auto类型推导
  • Linux517 rsync同步 rsync借xinetd托管 配置yum源回顾
  • ChatGPT + DeepSeek 联合润色的 Prompt 模板指令合集,用来润色SCI论文太香了!
  • SECERN AI提出3D生成方法SVAD!单张图像合成超逼真3D Avatar!
  • day27 python 装饰器
  • 低空经济发展现状与前景
  • 使用lvm进行磁盘分区
  • 致敬经典 << KR C >> 之打印输入单词水平直方图和以每行一个单词打印输入 (练习1-12和练习1-13)
  • 基于Spring Boot和Vue的在线考试系统架构设计与实现(源码+论文+部署讲解等)
  • DeerFlow试用
  • 基于单片机的防盗报警器设计与实现
  • 戛纳打破“疑罪从无”惯例,一法国男演员被拒之门外
  • 新版城市规划体检评估解读:把城市安全韧性摆在更加突出位置
  • 北京13日冰雹过后,已受理各险种报案近3万件
  • 赖清德为“临阵脱逃”作准备,国台办:绝不会任“台独”祸首逍遥法外
  • 西北大学副校长范代娣成陕西首富?系家庭财富,本人已从上市公司退出
  • Manus向全球用户开放注册