Seleccionar página

Migración standalone.xml a Wildfly 15.0 – Elytron

por | Feb 5, 2019 | Java, JBoss AS / JBoss EAP / WildFly, JEE

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!

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Blog de Neodoo Microsystems
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles. Puedes encontrar más información en nuestra Política de privacidad y Política de cookies.