2.3. 使用基于数据库的身份存储配置身份验证
确定用户名、密码和角色的数据库格式:
要使用身份存储的数据库来设置身份验证,您需要确定用户名、密码和角色如何存储在该数据库中。在本例中,我们使用带有以下示例数据的单个表:
username password 角色 user1
password123
Admin
user2
password123
guest
配置数据源:
若要从 JBoss EAP 连接数据库,您必须已部署适当的数据库驱动程序,并且配置了数据源。本例演示了为 PostgreSQL 部署驱动程序并在 JBoss EAP 中配置数据源:
deploy /path/to/postgresql-9.4.1210.jar data-source add --name=examplePostgresDS --jndi-name=java:jboss/examplePostgresDS --driver-name=postgresql-9.4.1210.jar --connection-url=jdbc:postgresql://localhost:5432/postgresdb --user-name=postgresAdmin --password=mysecretpassword
在 JBoss EAP 中配置 a
jdbc-realm
:/subsystem=elytron/jdbc-realm=exampleDbRealm:add(principal-query=[{sql="SELECT password,roles FROM eap_users WHERE username=?",data-source=examplePostgresDS,clear-password-mapper={password-index=1},attribute-mapping=[{index=2,to=groups}]}])
注意上例演示了如何从单个
主体查询获取密码和角色。
如果您需要多个查询来获取角色或额外的身份验证或授权信息,您也可以使用 attribute-mapping
属性创建额外的 principal-query
。有关支持的密码映射器列表,请参阅 Password Mappers。
配置
security-domain
:/subsystem=elytron/security-domain=exampleDbSD:add(realms=[{realm=exampleDbRealm,role-decoder=groups-to-roles}],default-realm=exampleDbRealm,permission-mapper=default-permission-mapper)
在
undertow
子系统中配置application-security-domain
:/subsystem=undertow/application-security-domain=exampleApplicationDomain:add(security-domain=exampleDbSD)
注意可以通过导航到 Configuration
Subsystems Web(Under tow
)→ Application Security Domain,使用管理控制台配置 undertow 子系统中的application-security-domain
。配置应用程序的
web.xml
和jboss-web.xml
:您的
web.xml
和jboss-web.xml
必须更新为使用您在 JBoss EAP 中配置的application-security-domain
。例如,将 Web 应用程序配置为使用 Elytron 或传统安全性进行身份验证。