Skip to main content
Imagen decorativa con bola del mundo y usuario

Recuperar el usuario que invoca un método de un servicio REST (JAX-RS)

En esta entrada veremos cómo recuperar información del usuario que invoca un método de nuestra API REST, siempre que implemente el estándar JAX-RS. Para ello haremos uso del contexto de seguridad (SecurityContext) que podemos inyectar tanto en nuestro método como en la clase.

El contexto de seguridad  almacena información relativa a la seguridad dentro del contexto de la petición. Entre los métodos que tenemos que implementar está “isUserInRole” que devuelve un booleano indicando si el usuario logado tiene el rol pasado como parámetro al método. También almacena el nombre del usuario.

Podemos utilizar la información del contexto de seguridad, por ejemplo, para realizar alguna operación especial o comprobación, en función de los roles del usuario que realiza la petición. También podemos recuperar el usuario que realiza una determinada operación para guardar esa información como parte de la auditoría de nuestra aplicación.

A continuación mostramos como inyectarlo y usarlo en un método:

@GET
@Produces({MediaType.APPLICATION_JSON+";charset=utf-8"})
@Secured
public Pelicula findPeliculas(@Context SecurityContext secContext, @QueryParam("titulo") String titulo, @QueryParam("nombreActor") String nombreActor) throws Exception{
		
		//Podemos comprobar si el usuario tiene un rol determinado
		if(secContext.isUserInRole("ADMINISTRADOR")) {
            //Realizar alguna operación específica para el administrador
        }

		//Podemos recuperar el nombre del usuario
		String nombre = null;
        Principal p = secContext.getUserPrincipal();
        if(p != null) {
            nombre = p.getName();
        }
		        
        // Habría que llamar a un servicio de búsqueda de películas
        return getPeliculaEjemplo(); 
    }

La anotación @Context es la que nos permite inyectar de un modo sencillo el contexto de seguridad.

Si queremos inyectarlo como atributo de la clase que contiene los métodos pondríamos:

@Path("/pelicula")
public class PeliculaResource {

    @Context SecurityContext secContext;

...

Espero que esta entrada te haya resultado útil. Por favor, valórala y deja tu comentario si tinenes cualquier duda.

Deja un comentario

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

Uso de cookies

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

CERRAR