1.2. 创建 JDBC 域
1.2.1. 在 Elytron 中创建一个 jdbc-realm
创建一个 jdbc-realm
和一个引用域的安全域,来保护 JBoss EAP 服务器接口或部署在服务器上的应用程序。
此流程中的示例使用了 PostgreSQL 数据库,其配置如下:
- 数据库名称:postgresdb
数据库登录凭证:
- 用户名: postgres
- 密码: postgres
- 表名称:example_jboss_eap_users
example_jboss_eap_users 内容:
用户名 密码 角色 user1
passwordUser1
Admin
user2
passwordUser2
Guest
先决条件
- 您已配置了包含用户的数据库。
- JBoss EAP 正在运行。
- 您已下载了合适的 JDBC 驱动程序。
流程
使用管理 CLI为数据库部署数据库驱动程序。
语法
deploy <path_to_jdbc_driver>/<jdbc-driver>
Example
deploy PATH_TO_JDBC_DRIVER/postgresql-42.2.9.jar
将数据库配置为数据源。
语法
data-source add --name=<data_source_name> --jndi-name=<jndi_name> --driver-name=<jdbc-driver> --connection-url=<database_URL> --user-name=<database_username> --password=<database_username>
Example
data-source add --name=examplePostgresDS --jndi-name=java:jboss/examplePostgresDS --driver-name=postgresql-42.2.9.jar --connection-url=jdbc:postgresql://localhost:5432/postgresdb --user-name=postgres --password=postgres
在 Elytron 中创建一个
jdbc-realm
。语法
/subsystem=elytron/jdbc-realm=<jdbc_realm_name>:add(principal-query=[<sql_query_to_load_users>])
Example
/subsystem=elytron/jdbc-realm=exampleSecurityRealm:add(principal-query=[{sql="SELECT password,roles FROM example_jboss_eap_users WHERE username=?",data-source=examplePostgresDS,clear-password-mapper={password-index=1},attribute-mapping=[{index=2,to=Roles}]}]) {"outcome" => "success"}
注意示例演示了如何从单个
principal-query
中获取密码和角色。如果您需要多个查询来获取角色或额外的身份验证或授权信息,您还可以创建具有额外attribute-mapping
属性的principal-query
。有关支持的密码映器的列表,请参阅 密码映射器。
创建一个引用
jdbc-realm
的安全域。语法
/subsystem=elytron/security-domain=<security_domain_name>:add(default-realm=<jdbc_realm_name>,permission-mapper=default-permission-mapper,realms=[{realm=< jdbc_realm_name>,role-decoder="<role_decoder_name>"}])
Example
/subsystem=elytron/security-domain=exampleSecurityDomain:add(default-realm=exampleSecurityRealm,permission-mapper=default-permission-mapper,realms=[{realm=exampleSecurityRealm}]) {"outcome" => "success"}
验证
要验证 Elytron 是否可以从数据库加载数据,请使用以下命令:
语法
/subsystem=elytron/security-domain=<security_domain_name>:read-identity(name=<username>)
Example
/subsystem=elytron/security-domain=exampleSecurityDomain:read-identity(name=user1) { "outcome" => "success", "result" => { "name" => "user1", "attributes" => {"Roles" => ["Admin"]}, "roles" => ["Admin"] } }
输出确认 Elytron 可以从数据库加载数据。
现在,您可以使用创建的安全域来向管理界面和应用程序添加身份验证和授权。如需更多信息,请参阅 保护管理界面和应用程序。