Seleccionar página

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.

 

Comparte este post si te ha resultado útil, así quizás puedas ayudar a alguien que lo necesite.

¡Gracias por tu difusión!

Pin It on Pinterest