第 2 章 使用 Jakarta Persistence 进行 quarkus 安全性


您可以将应用程序配置为使用 Jakarta Persistence 来存储用户身份。

Quarkus 提供 Jakarta Persistence 身份提供程序,类似于 JDBC 身份提供程序。Jakarta Persistence 适用于基于 BasicForm 的 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 字段必须是 StringCollection<String&gt; 或 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 扩展才会初始化。

1
@UserDefinition 注释必须存在于单个实体上,可以是常规的 Hibernate ORM 实体,也可以是带有 Panache 实体的 Hibernate ORM。
2
表示用于用户名的字段。
3
指明用于密码的字段。默认情况下,quarkus-security-jpa 使用 bcrypt-hashed 密码,或者您可以改为配置纯文本或自定义密码。
4
这表示添加到目标主体表示属性中的以逗号分隔的角色列表。
5
这个方法可让您在使用正确的 bcrypt 哈希进行哈希时添加用户。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.