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!

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies

Pin It on Pinterest