如何将Wildfly 9 Realm转换为Wildfly 28 Elytron 17.0 JDBC Realm认证?
Wildfly 9 PicketBox Realm 转 Wildfly 28 Elytron 配置
以下是将你提供的Wildfly 9安全域配置适配为Elytron 17.0(对应Wildfly 28)的完整配置,每部分都与原配置一一对应:
核心配置对应关系
原PicketBox配置的核心要素在Elytron中对应如下:
- 原
Database登录模块 → Elytron的jdbc-realm dsJndiName→ 关联同名称的数据源JNDI地址principalsQuery→ JDBC Realm的principal-querySQL语句rolesQuery→ JDBC Realm的role-querySQL语句unauthenticatedIdentity→ Security Domain的default-unauthenticated-principalhashAlgorithm+hashEncoding→ 独立的password-encoder配置
完整Elytron配置
<subsystem xmlns="urn:wildfly:elytron:17.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto"> <!-- 密码编码器:对应原配置的SHA-256哈希算法+base64编码规则 --> <password-encoder name="sha256Base64Encoder" algorithm="SHA-256" encoding="base64"> <salted with-password="false"/> </password-encoder> <!-- JDBC Realm:关联数据源并配置用户/角色查询逻辑 --> <jdbc-realm name="forrashazRealm" datasource="java:jboss/datasources/forrasDS" password-encoder="sha256Base64Encoder"> <!-- 用户密码查询:对应原principalsQuery --> <principal-query sql="select password from v_active_user where username=?"/> <!-- 角色查询:对应原rolesQuery,直接映射角色名到Roles分组 --> <role-query sql="select group_name, 'Roles' from user_join_group where user_name=?"/> </jdbc-realm> <!-- 安全域:关联JDBC Realm并设置未认证默认用户 --> <security-domain name="forrashazRealm" default-realm="forrashazRealm" permission-mapper="default-permission-mapper"> <realm name="forrashazRealm"/> <!-- 对应原配置的unauthenticatedIdentity --> <default-unauthenticated-principal name="anonymousUser"/> </security-domain> <!-- HTTP认证工厂:供Web应用调用该安全域进行认证 --> <http-authentication-factory name="forrashazAuthFactory" security-domain="forrashazRealm" http-server-mechanism-factory="global"> <mechanism-configuration> <mechanism name="BASIC"/> <!-- 如需FORM表单认证,可添加<mechanism name="FORM"/>配置 --> </mechanism-configuration> </http-authentication-factory> </subsystem>
额外配置说明
- 若你的密码存储时包含盐值,需要调整
password-encoder的salted配置,比如设置with-password="true",并在principal-query中补充盐值查询(如select password, salt from v_active_user where username=?) - 需在Undertow子系统中关联上述认证工厂,才能让Web应用生效:
<subsystem xmlns="urn:wildfly:undertow:24.0" default-server="default-server" default-virtual-host="default-host"> <server name="default-server"> <host name="default-host" alias="localhost"> <!-- 关联Elytron认证工厂 --> <http-authentication-factory name="forrashazAuthFactory" security-domain="forrashazRealm"/> </host> </server> </subsystem>
内容的提问来源于stack exchange,提问作者Papp Zoltán
相关产品推荐
相关产品推荐

