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

使用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上找到。

http://www.lryc.cn/news/2378558.html

相关文章:

  • 游戏引擎学习第287天:加入brain逻辑
  • continue通过我们的开源 IDE 扩展和模型、规则、提示、文档和其他构建块中心,创建、共享和使用自定义 AI 代码助手
  • 2025年EB SCI2区TOP,多策略改进黑翅鸢算法MBKA+空调系统RC参数辨识与负载聚合分析,深度解析+性能实测
  • .NET 中管理 Web API 文档的两种方式
  • 常见三维引擎坐标轴 webgl threejs cesium blender unity ue 左手坐标系、右手坐标系、坐标轴方向
  • 【HTML】个人博客页面
  • 论文解读:ICLR2025 | D-FINE
  • 9.DMA
  • 大语言模型 10 - 从0开始训练GPT 0.25B参数量 补充知识之模型架构 MoE、ReLU、FFN、MixFFN
  • python基础语法(三-中)
  • 【gitee 初学者矿建仓库】
  • 思路收集文档
  • OpenCV 光流估计:从原理到实战
  • 使用HtmlAgilityPack采集墨迹天气中的天气数据
  • ZTE 7551N 中兴小鲜60 远航60 努比亚小牛 解锁BL 刷机包 刷root 展讯 T760 bl
  • SearxNG本地搜索引擎
  • MyBatis 核心组件源码分析
  • 信息系统项目管理师高级-软考高项案例分析备考指南(2023年案例分析)
  • stack和queue简单模拟实现
  • 如何安装双系统?即windows已经安装,如何安装ubuntu 22.04LTS
  • 产品经理入门(2)产品体验报告
  • C43-指针与数组
  • UDP--DDR--SFP,FPGA实现之ddr读写控制模块
  • 云计算与大数据进阶 | 26、解锁云架构核心:深度解析可扩展数据库的5大策略与挑战(上)
  • AI Agent | Coze 插件使用指南:从功能解析到实操步骤
  • 06、基础入门-SpringBoot-依赖管理特性
  • MK米客方德SD NAND:无人机存储的高效解决方案
  • 【vscode】解决vscode无法安装远程服务器插件问题,显示正在安装
  • 1688 数据接口调用秘籍:高效获取商品实时信息的开发指南
  • 【Spring】Spring的请求处理