如何获取当前请求的URI?
How to get URI of current request?
我需要在 Quarkus 中解析当前请求的 URI(我使用的是 Quarkus 1.13)。我使用 RESTEasy 作为我的休息框架。在我的案例中需要当前请求 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();
}
RESTEasy 是 JAX-RS 的实现,它提供了获取和处理有关 context of individual requests 的信息的工具。
JAX-RS 在该上下文中有 UriInfo
class。它提供有关请求 URI 组件的静态和动态的每个请求信息。您只需要使用 @Context
注释和 UriInfo
class 将该上下文注入到您的 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();
}
我需要在 Quarkus 中解析当前请求的 URI(我使用的是 Quarkus 1.13)。我使用 RESTEasy 作为我的休息框架。在我的案例中需要当前请求 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();
}
RESTEasy 是 JAX-RS 的实现,它提供了获取和处理有关 context of individual requests 的信息的工具。
JAX-RS 在该上下文中有 UriInfo
class。它提供有关请求 URI 组件的静态和动态的每个请求信息。您只需要使用 @Context
注释和 UriInfo
class 将该上下文注入到您的 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();
}