第 2 章 使用 Jakarta Persistence 进行 quarkus 安全性
您可以将应用程序配置为使用 Jakarta Persistence 来存储用户身份。
Quarkus 提供 Jakarta Persistence 身份提供程序,类似于 JDBC 身份提供程序。Jakarta Persistence 适用于基于 Basic 和 Form 的 Quarkus 安全机制,这需要用户名和密码凭证。
Jakarta Persistence IdentityProvider
创建一个 SecurityIdentity
实例。在用户身份验证过程中,此实例用于验证和授权访问请求。
有关实际示例,请参阅开始使用基本身份验证和 Jakarta Persistence 指南。
2.1. Jakarta Persistence 实体规格
Quarkus 安全提供了 Jakarta Persistence 集成,用于收集用户名、密码和角色,并将它们存储在 Jakarta Persistence 数据库实体中。
以下 Jakarta Persistence 实体规格演示了如何将用户信息存储在 Jakarta Persistence 实体中,并正确映射,以便 Quarkus 可以从数据库检索此信息。
-
Jakarta Persistence 实体上必须存在
@UserDefinition
注释,无论是否使用 带有 Panache 的简化的 Hibernate ORM。 -
@Username
和@Password
字段类型始终为String
。 -
@Roles
字段必须是String
、Collection<String>
; 或Collection<X
>,其中X
是带有单个String
字段的实体类,标记为@RolesValue
。 -
每个
String
角色元素类型都作为以逗号分隔的角色列表解析。
以下示例演示了通过在 用户
实体中添加注解来存储安全信息:
package org.acme.security.jpa; import jakarta.persistence.Entity; import jakarta.persistence.Table; import io.quarkus.hibernate.orm.panache.PanacheEntity; import io.quarkus.elytron.security.common.BcryptUtil; import io.quarkus.security.jpa.Password; import io.quarkus.security.jpa.Roles; import io.quarkus.security.jpa.UserDefinition; import io.quarkus.security.jpa.Username; @Entity @Table(name = "test_user") @UserDefinition 1 public class User extends PanacheEntity { @Username 2 public String username; @Password 3 public String password; @Roles 4 public String role; /** * Adds a new user to the database * @param username the username * @param password the unencrypted password (it is encrypted with bcrypt) * @param role the comma-separated roles */ public static void add(String username, String password, String role) { 5 User user = new User(); user.username = username; user.password = BcryptUtil.bcryptHash(password); user.role = role; user.persist(); } }
只有在单个实体被标上 @UserDefinition
标注时,quarkus-security-jpa
扩展才会初始化。