Quarkus 1.13+RESTEasy环境下如何获取当前请求的URI?
解决方案
在Quarkus 1.13 + RESTEasy 环境下,你可以通过JAX-RS标准的@Context注解注入UriInfo对象直接获取当前请求的完整URI,这是最推荐的实现方式:
代码修改示例
import javax.ws.rs.core.Context; import javax.ws.rs.core.UriInfo; @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( // 注入UriInfo对象 @Context UriInfo uriInfo, @HeaderParam("x-mandrill-signature") String mandrillSignature, @FormParam("mandrill_events") String mandrillEvents ) throws JsonProcessingException { // 获取完整请求URI String requestUri = uriInfo.getRequestUri().toString(); final var mandrillSignatureValid = mandrillSignatureValidator .valid(requestUri, mandrillSignature, mandrillEvents); // code skipped for brevity return Response.ok().build(); } }
注意事项
- 如果你的服务部署在Nginx等反向代理之后,需要在
application.properties中添加配置quarkus.http.proxy.enable=true,才能正确获取到外部用户请求的原始URI,而非服务内部监听的地址 - 除了
UriInfo之外你也可以注入HttpServletRequest对象,调用getRequestURL().toString()获取URI,不过前者是JAX-RS规范定义的标准接口,适配性更强
内容的提问来源于stack exchange,提问作者Michał Zalewski
相关产品推荐
相关产品推荐

