S02L08 – 使用 JPA 从数据库中获取用户信息以用于 JWT

html

利用 JPA 在带有 JWT 认证的 Spring Boot 中进行用户管理

目录

  1. 介绍
  2. 设置 Spring Boot 项目
  3. 创建数据模型
  4. 实现服务层
  5. 种子数据初始化
  6. 安全配置
  7. Controller 设置
  8. 运行应用程序
  9. 结论

介绍

在现代 Web 应用程序中,管理用户认证和授权对于确保安全性和个性化用户体验至关重要。这本电子书深入探讨了如何在 Spring Boot 应用程序中利用 Java Persistence API (JPA) 来处理直接存储在数据库中的用户详情,并集成 JSON Web Token (JWT) 以实现安全认证。

关键点:

  • 从内存中的用户详情转换为基于数据库的用户管理。
  • 使用 JPA 和 H2 Database 配置 Spring Boot。
  • 实现安全的密码编码。
  • 设置基于 JWT 的认证。

优缺点

优点 缺点
通过将用户数据存储在数据库中增强了安全性 设置和配置的复杂性增加
处理大量用户的可扩展性 需要理解 JPA 和 Spring Security
在管理用户角色和权限方面具有灵活性 数据库交互可能带来性能开销

何时及何地使用

这种设置非常适合需要强大用户管理、可扩展性和增强安全功能的应用程序,如企业级应用、电子商务平台和社交媒体服务。


设置 Spring Boot 项目

添加依赖

首先,我们将使用 Spring Initializer 初始化一个 Spring Boot 项目,并添加以下依赖:

  • Maven:作为构建自动化工具。
  • Spring Data JPA:用于 ORM 功能。
  • H2 Database:用于开发和测试的内存数据库。
  • Validation:用于强制执行用户输入的约束。

步骤:

  1. 导航到 Spring Initializer
  2. 选择 Maven 作为项目类型。
  3. 添加以下依赖:
    • Spring Data JPA
    • H2 Database
    • Spring Boot Starter Validation
  4. 点击 Generate 下载项目压缩包。
  5. 解压缩并在首选的 IDE 中打开项目。

pom.xml 代码片段:


配置应用属性

接下来,配置应用属性以设置数据库连接和其他基本设置。

src/main/resources/application.properties

关键设置说明:

属性 描述
server.port 定义应用程序运行的端口。默认是 8080
spring.datasource.url 用于连接 H2 数据库的 JDBC URL。
spring.jpa.hibernate.ddl-auto 管理数据库模式的生成。create-drop 会在启动时创建模式,并在关闭时删除它。
spring.h2.console.enabled 启用 H2 数据库控制台以进行直接数据库交互。
spring.h2.console.path 指定访问 H2 控制台的 URL 路径。

创建数据模型

Account 实体

Account 实体表示存储在数据库中的用户详情。它包括 idemailpasswordrole 等字段。

src/main/java/org/studyeasy/SpringRestdemo/model/Account.java

关键注解:

  • @Entity:将类标记为 JPA 实体。
  • @Id:指定主键。
  • @GeneratedValue:定义主键生成策略。
  • @Column:配置列的特定设置,如唯一性和可为空性。

Account 仓库

AccountRepository 接口扩展 JpaRepository,以提供 Account 实体的 CRUD 操作。

src/main/java/org/studyeasy/SpringRestdemo/repository/AccountRepository.java

关键方法:

  • findByEmail(String email):自定义查询方法,通过 email 检索账户。

实现服务层

Account 服务

服务层包含业务逻辑,并与仓库交互以管理 Account 实体。

src/main/java/org/studyeasy/SpringRestdemo/service/AccountService.java

功能:

  • save(Account account):在将账户保存到数据库之前对用户密码进行编码,确保密码安全。

种子数据初始化

为了向数据库填充初始用户数据,SeedData 组件实现了 CommandLineRunner。

src/main/java/org/studyeasy/SpringRestdemo/config/SeedData.java

说明:

  • @Component:将类标记为 Spring 管理的组件。
  • CommandLineRunner:在应用程序启动后执行 run 方法以插入种子数据。
  • Seed Accounts:创建两个具有编码密码的用户账户。

安全配置

密码编码器 Bean

为了处理密码编码,使用 BCrypt 定义一个 PasswordEncoder bean。

src/main/java/org/studyeasy/SpringRestdemo/config/SecurityConfig.java

关键点:

  • BCryptPasswordEncoder:为密码提供强大的加密。
  • @Bean:将 PasswordEncoder 注册到 Spring 上下文中以进行依赖注入。

Controller 设置

Account Controller

处理与用户相关的 HTTP 请求,如注册和检索。

src/main/java/org/studyeasy/SpringRestdemo/controller/AccountController.java

端点:

  • POST /api/accounts/register:通过将账户保存到数据库并对密码进行编码来注册新用户账户。

Auth Controller

管理认证过程,包括登录和令牌生成。

src/main/java/org/studyeasy/SpringRestdemo/controller/AuthController.java

功能:

  • POST /api/auth/login:认证用户并在成功登录后返回 JWT 令牌。

运行应用程序

  1. 构建项目:确保所有依赖项已解决,且项目成功构建。
  2. 运行应用程序:启动 Spring Boot 应用程序。
  3. 访问 H2 控制台:导航到 http://localhost:8080/h2-console 查看内存数据库。使用 JDBC URL jdbc:h2:mem:testdb,用户名 sa,无密码。
  4. 测试端点:使用 Postman 等工具测试用户注册和认证的 API 端点。

结论

这本电子书提供了一份全面的指南,介绍了如何在 Spring Boot 应用程序中使用 JPA 和 JWT 实现一个强大的用户管理系统。通过从内存中的用户详情过渡到基于数据库的方法,开发人员可以在管理用户数据方面实现增强的安全性、可扩展性和灵活性。

主要收获:

  • Spring Boot & JPA 集成:通过 Spring Data JPA 无缝管理用户实体。
  • 密码安全:利用 BCrypt 对密码进行编码,确保其安全存储。
  • JWT 认证:实现基于令牌的认证,以实现安全和无状态的用户会话。
  • 种子数据初始化:在应用程序启动期间自动填充初始用户数据。

SEO 关键词:

Spring Boot, JPA, JWT Authentication, User Management, H2 Database, Spring Security, Password Encoder, BCrypt, REST API, Spring Data JPA, In-Memory Authentication, Database-Driven User Details, Spring Initializer, CommandLineRunner, Seed Data, Token-Based Authentication, Secure Password Storage, RESTful Services, Spring Controller, Account Service, Account Repository

这篇文章是 AI 生成的。






分享你的喜爱