如何获取当前请求的URI?

4
我需要解决在Quarkus(我使用的是Quarkus 1.13)中当前请求的URI。我使用RESTEasy作为我的rest框架。在我的情况下,需要当前请求URI来验证Mandrill webhook调用。
简化后,我的当前实现如下:
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Path("/api/v1/webooks/mandrill")
public class MandrillWebhookResource {

    // code skipped for brevity

    @POST
    public Response mandrill(
            @HeaderParam("x-mandrill-signature") String mandrillSignature,
            @FormParam("mandrill_events") String mandrillEvents
    ) throws JsonProcessingException {
        final var mandrillSignatureValid = mandrillSignatureValidator
          .valid(/* here I need request URI */, mandrillSignature, mandrillEvents);

        // code skipped for brevity

        return Response.ok().build();
    }
1个回答

4
RESTEasy是JAX-RS的实现,它提供了获取和处理关于单个请求上下文信息的工具。
JAX-RS有一个名为UriInfo的类来处理上下文。它提供静态和动态的每个请求信息,关于请求URI的组件。你只需要使用@Context注释和UriInfo类将该上下文注入到您的POST方法中即可。
做法如下:
@POST
public Response mandrill(
        @Context UriInfo uriInfo,
        @HeaderParam("x-mandrill-signature") String mandrillSignature,
        @FormParam("mandrill_events") String mandrillEvents
) throws JsonProcessingException {
    final var requestUri = uriInfo.getRequestUri();

    final var mandrillSignatureValid = mandrillSignatureValidator
      .valid(requestUri, mandrillSignature, mandrillEvents);

    // code skipped for brevity

    return Response.ok().build();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接