es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Quarkus/MicroProfile Rest Client Session Cookie: Sesión de cliente de Rest de Quarkus/MicroProfile y cookie.

Estoy utilizando el cliente de rest de Quarkus para comunicarme con un servicio externo que utiliza dos cookies para autenticar todas las solicitudes. Estas dos cookies son devueltas por una API de autenticación y por cada llamada posterior a la API. ¿Existe alguna manera de manejar estas cookies automáticamente? Actualmente, obtengo las cookies del objeto de respuesta de la API de autenticación y las envío manualmente en cada solicitud utilizando @CookieParam.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una manera de manejar estas cookies automáticamente utilizando el cliente Rest de Quarkus. Puede utilizar la anotación @RegisterProvider del cliente Rest de Quarkus para registrar un javax.ws.rs.client.ClientRequestFilter que puede agregar automáticamente las cookies a cada solicitud.

    Aquí hay un ejemplo de código:

    @RegisterRestClient
    @Path("/api")
    @RegisterProvider(MyClientRequestFilter.class)
    public interface MyServiceClient {
    
        @POST
        @Path("/login")
        @Produces(MediaType.APPLICATION_JSON)
        @Consumes(MediaType.APPLICATION_JSON)
        Response login(LoginRequest request);
    
        @GET
        @Path("/resource")
        @Produces(MediaType.APPLICATION_JSON)
        @Consumes(MediaType.APPLICATION_JSON)
        Response getResource();
    }
    
    public class MyClientRequestFilter implements ClientRequestFilter {
    
        @Context
        HttpHeaders httpHeaders;
    
        @Override
        public void filter(ClientRequestContext requestContext) throws IOException {
            // Obtener las cookies de la respuesta previa
            List<string> cookies = httpHeaders.getRequestHeaders().get("Set-Cookie");
    
            // Agregar las cookies a los encabezados de la solicitud
            if (cookies != null) {
                for (String cookie : cookies) {
                    requestContext.getHeaders().add("Cookie", cookie);
                }
            }
        }
    }
    

    En este ejemplo, tenemos una interfaz MyServiceClient que define los puntos finales de la API REST. También hemos registrado una clase MyClientRequestFilter utilizando la anotación @RegisterProvider. MyClientRequestFilter implementa la interfaz ClientRequestFilter y anula el método filter. En el método filter, obtenemos las cookies de la respuesta previa utilizando la anotación @Context para inyectar el objeto HttpHeaders. Luego agregamos las cookies a los encabezados de la solicitud utilizando el método requestContext.getHeaders().add("Cookie", cookie).

    Con esta configuración, cada vez que llamemos a un método en la interfaz MyServiceClient, las cookies se agregarán automáticamente a los encabezados de la solicitud.

Comments are closed.