Introduccion
Tenemos un proyecto EAR con una serie de modulos entre los cuales tenemos una Aplicacion Web y un Api con servicios REST y WSDL. El entorno hasta ahora estaba montado con Wildfly 10. En este post comentamos unos detalles de como hemos realizado la migración a Wildfly 15, en materia de configuración del fichero standalone.xml.
Configuracion antigua con Wildfly 10
En el standalone.xml antiguo, teníamos esta configuración:
Un datasource tipico, denominado «MyDatasource» y un security-domain, configurado asi:
<security-domain name="MyCustomDomain">
<authentication>
<login-module code="Remoting" flag="optional">
<module-option name="password-stacking" value="useFirstPass"/>
</login-module>
<login-module code="Database" flag="required">
<module-option name="dsJndiName" value="java:jboss/datasources/MyDatasource"/>
<module-option name="principalsQuery" value="SELECT pwd FROM user WHERE user=?"/>
<module-option name="rolesQuery" value="SELECT rol,'Roles' FROM user_rol WHERE user=?"/>
<module-option name="hashAlgorithm" value="SHA-256"/>
<module-option name="hashEncoding" value="base64"/>
<module-option name="unauthenticatedIdentity" value="guest"/>
</login-module>
</authentication>
</security-domain>
En los jboss-web.xml de los módulos de la Web y el Api teníamos:
<security-domain>MyCustomDomain</security-domain>
es decir, el nombre del security-domain. Con esto era suficiente para que el proyecto arrancase correctamente.
Migramos a Wildfly 15 con Elytron
Para configurarlo con Elytron para Wildfly 15.0 se ha realizado lo siguiente:
Inicialmente se habrá configurado el datasource correspondiente, igual que antiguamente. (denominado: MyDatasource)
Primero configuramos el subsistema de elytron, para ello creamos un nuevo security-domain y un jdbc-realm:
<security-domains>
...
<security-domain name="MyCustomSecurityDomain" default-realm="MyCustomRealm" permission-mapper="default-permission-mapper">
<realm name="MyCustomRealm" role-decoder="from-roles-attribute"/>
</security-domain>
...
</security-domains>
El jdbc-realm, es donde configuramos lo que anitiguamente se hacia en el login-module
. Conteine la query de passwords junto al algoritmo de encriptacion y la query de roles:
<security-realms>
...
<jdbc-realm name="MyCustomRealm">
<principal-query sql="SELECT pwd FROM user where user = ?" data-source="MyDatasource">
<simple-digest-mapper algorithm="simple-digest-sha-256" password-index="1"/>
</principal-query>
<principal-query sql="SELECT rol, 'Roles' FROM user_rol where user = ?" data-source="MyDatasource">
<attribute-mapping>
<attribute to="roles" index="1"/>
</attribute-mapping>
</principal-query>
</jdbc-realm>
...
</security-realms>
A continuación creamos el role-decoder declarado en nuestro security-domain
<mappers>
...
<simple-role-decoder name="from-roles-attribute" attribute="roles"/>
...
</mappers>
Después creamos un nuevo htttp-authentication-factory:
<http>
...
<http-authentication-factory name="MyCustomHttpAuth" security-domain="MyCustomSecurityDomain" http-server-mechanism-factory="global">
<mechanism-configuration>
<mechanism mechanism-name="FORM">
<mechanism-realm realm-name="MyCustomMechanismRealm"/>
</mechanism>
<mechanism mechanism-name="BASIC"/>
</mechanism-configuration>
</http-authentication-factory>
...
</http>
Ahora que tenemos definido el subsitema de Elytron, vamos a configurar los subsistemas Undertow y Ejb3: Dentro del subsitema undertow añadimos:
<subsystem xmlns="urn:jboss:domain:undertow:8.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other">
...
<application-security-domains>
<application-security-domain name="MyCustomSecurityDomain" http-authentication-factory="MyCustomHttpAuth"/>
</application-security-domains>
</subsystem>
Y dentro del subsitema ejb3 añadimos:
<subsystem xmlns="urn:jboss:domain:ejb3:5.0">
...
<application-security-domains>
<application-security-domain name="MyCustomSecurityDomain" security-domain="MyCustomSecurityDomain"/>
</application-security-domains>
...
</subsystem>
Por ultimo añadimos el nombre del application-security-domain a los jboss_web.xml, tanto en el modulo de la Web como el del Api de WebServices:
<security-domain>MyCustomSecurityDomain</security-domain>
Como detalle final, hay que prestar especial atención a los nombres de los elementos, si no cuadran a la perfección los despliegues darán errores.
0 comentarios