Obtener Usuario Autenticado por medio de JAAS en un WebService EJB 3.0

Introducción:

 

Cuando se consume un cliente de un WebService, lo primero que se debe hacer de parte del cliente es pasar por una etapa de autenticación y autorización; el usuario ingresado es verificado según las políticas de seguridad establecidas por medio de JAAS (Java Authentication and Authorization Service), las cuales en el caso de utilizar un servidor Jboss se encuentran definidas en el archivo JBOSS_HOME\server\default\conf\login-config.xml. 

A continuación podemos ver un ejemplo de la definición de una  política de seguridad declarada en dicho archivo:

<application-policy name="ExamplePolicy">
   <authentication>
     <login-module code="org.jboss.security.ClientLoginModule" flag="required">
     </login-module>
     <login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required">
       <module-option name="dsJndiName">java:/exampleDS</module-option>
       <module-option name="principalsQuery">
           SELECT contrasena
           FROM usuario
           WHERE usuario = ?
       </module-option>
       <module-option name="rolesQuery">
           SELECT usuario, 'Roles'
           FROM usuario
           WHERE usuario = ?
       </module-option>
       <module-option name="hashAlgorithm">MD5</module-option>
       <module-option name="hashEncoding">hex</module-option>
       <module-option name="hashCharset">UTF-8</module-option>
     </login-module>
   </authentication>
 </application-policy>




Gracias a estas políticas de seguridad el usuario que va a consumir el WebService implementado, será buscado en la base de datos del sistema por medio de las consultas escritas en el archivo XML; si dicha consulta genera resultados entonces se dará como autenticado al usuario, de lo contrario no.

Ahora bien, si necesitaramos luego de pasar por este proceso de autenticación y autorización obtener el registro del usuario que está consumiendo el servicio web, es decir que dentro de la lógica del WebService quisieramos saber qué usuario ha sido autenticado, se puede hacer gracias a la anotación @Resource, siguiendo los siguientes pasos:

Paso 1:

Lo primero que se debe hacer es declarar un objeto de tipo SessionContext con la anotación @Resource en la clase principal del WebService a consumir, de la siguiente manera:

@Resource
private SessionContext sessionContext;

Paso 2:

Una vez declarado el objeto con esta anotación podemos obtener el usuario que está consumiendo ese WebService por medio del método getCallerPrincipal() de SessionContext. Por ejemplo podemos mandar a imprimir en pantalla el valor del usuario autenticado de la siguente manera:

System.out.println(sessionContext.getCallerPrincipal());

Resultado:

Como resultado  obtenemos el usuario que en un momento determinado se encuentra consumiendo el WebService implementado.

Espero que este breve tutorial les sea de utilidad.

Comentarios