1.5. 定义用户实体


通过在 用户 实体中添加以下注解来指定存储在模型中的安全信息:

src/main/java/org/acme/security/jpa/User.java

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();
    }
}
Copy to Clipboard Toggle word wrap

只有在单个实体被标上 @UserDefinition 标注时,quarkus-security-jpa 扩展才会初始化。

1
@UserDefinition 注释必须存在于单个实体上,可以是常规的 Hibernate ORM 实体,也可以是带有 Panache 实体的 Hibernate ORM。
2
表示用于用户名的字段。
3
指明用于密码的字段。默认情况下,它使用 bcrypt-hashed 密码。您可以将其配置为使用纯文本或自定义密码。
4
表示添加到目标主体表示属性中的以逗号分隔的角色列表。
5
提供了一种帮助程序方法来添加正确哈希密码的用户。BcryptUtil.bcryptHash () 方法:
  • 为每个密码自动生成随机 salt。
  • 使用带有 10 个迭代(默认)的 bcrypt 对密码进行哈希处理。
  • 返回 Modular Crypt Format (MCF)中的哈希,其中包括算法标识符、成本参数、salt 和 hash。
提示

密码散列最佳实践:

  • 始终将纯文本密码传递给 BcryptUtil.bcryptHash () - 永远不会预哈希它们。
  • bcrypt 哈希包含 salt,因此不需要单独的 salt 存储。
  • 要在身份验证过程中验证密码,框架会自动使用 BcryptUtil.matches (plainPassword, hashedPassword)
  • 对于自定义迭代: BcryptUtil.bcryptHash (password, iterationCount) 在更高的迭代(12-14))提供更多安全性,但性能较慢。
注意

记得设置 Panache 和 PostgreSQL JDBC 驱动程序。如需更多信息,请参阅使用 Panache 设置和配置 Hibernate ORM

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat