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 cliente REST reactivo @HeaderParam(“Authorization”) no está funcionando y cómo depurar

En mi aplicación Quarkus, necesito hacer una solicitud HTTP a otro servidor en la que se debe pasar el valor de Authorization.

Estoy usando el cliente REST reactivo y he intentado usar @HeaderParam("Authorization") para personalizar el encabezado:
“`
@Path("/api")
@ApplicationScoped
@RegisterRestClient
@RegisterProvider(value = RestClientExceptionMapper.class)
public interface InternalService {
@POST
@Path("/xxx")
@Produces({APPLICATION<em>JSON})
@Consumes({APPLICATION</em>JSON})
Uni<List<String>> Abc(
@HeaderParam("Authorization") String bearerVal,
List<String> values);
}

“`
No funciona.

En el lado del cliente, puedo confirmar que bearerVal se establece correctamente como Bearer xxx.

En el lado del servidor, puedo confirmar que se recibe la solicitud, pero el valor del encabezado Authorization no se establece.

Me pregunto qué falta aquí. ¿Cómo puedo depurar los valores del encabezado utilizados por el cliente HTTP subyacente?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que podría haber un problema con la forma en que se está pasando el encabezado Authorization en la solicitud. Una posible solución es usar la anotación @Header en lugar de @HeaderParam. Esto te permitirá pasar el valor del encabezado Authorization directamente como parámetro.

    Aquí tienes un ejemplo:

    @Path("/api")
    @ApplicationScoped
    @RegisterRestClient
    @RegisterProvider(value = RestClientExceptionMapper.class)
    public interface InternalService {
      @POST
      @Path("/xxx")
      @Produces({APPLICATION_JSON})
      @Consumes({APPLICATION_JSON})
      Uni<><string>> Abc(
          @Header("Authorization") String bearerVal,
          List<string> values);
    }
    

    Otra forma de depurar los valores de encabezado utilizados por el cliente HTTP subyacente es utilizar un sniffer de paquetes de red como Wireshark. Esto te permitiría inspeccionar el tráfico de red real entre tu cliente y servidor y ver qué encabezados se están enviando en la solicitud. Luego puedes utilizar esta información para solucionar cualquier problema con tu código.

Comments are closed.