Jersey 以编程方式获取请求对象

Jersey 以编程方式获取请求对象,jersey,jersey-2.0,Jersey,Jersey 2.0,是否有任何方法可以通过编程方式获取请求(HttpServletRequest?)?我只能找到如何通过端点方法/类上的注释来实现这一点 根据,我可以向端点添加带注释的参数: @POST @Path("/test") @Produces(MediaType.APPLICATION_JSON) public String showTime( @Context HttpServletRequest httpRequest ) { // The method body } 或者我可以在

是否有任何方法可以通过编程方式获取请求(HttpServletRequest?)?我只能找到如何通过端点方法/类上的注释来实现这一点

根据,我可以向端点添加带注释的参数:

@POST 
@Path("/test")
@Produces(MediaType.APPLICATION_JSON)
public String showTime(
    @Context HttpServletRequest httpRequest
) {
    // The method body
}
或者我可以在类()中注入

但是,我希望在另一个未直接链接到Jersey的类中访问该请求。添加上面第二个示例中的@Context注入不起作用,因为Jersey没有实例化该类。我希望能做一些类似的事情

HttpServletRequest.getCurrentRequest()

但是我还没有找到任何静态方法

如果您正在寻找一些安全解决方案,您可以使用servlet过滤器(创建实现
过滤器
的类),或者可以实现
ContainerRequestFilter
并通过覆盖
过滤器
来执行过滤。外部过滤器始终只能在控制器中访问上下文元素(在放置路径注释的位置),除了将其传递给所需的方法或对象之外,无法从控制器外部访问此类内容:

  @Context
private HttpServletRequest httpRequest;

  @GET  
  public Response foo() {  
    someMethod(httpRequest); //or whatever else you want to do with it
  }
}

希望这能有所帮助。

您能澄清更多关于代码或尝试编写代码的信息吗?@mrpourse添加了几个示例请准确显示您希望访问它的位置,以及它与您的球衣的连接方式resource@peeskillet我希望能够从资源处理过程中调用的任何函数访问它,而无需进行更改到我的所有端点。访问它的地方可能没有到资源的“连接”,除此之外,资源函数在调用堆栈的某个位置。您最好使用依赖项注入。HttpServletRequest可以注入到系统中绑定的任何服务中。除此之外,使用DI是一种很好的做法。请看,我没有这样做g任何安全方面的东西。我想这是为了一些事情,但我想最简单的是我想在我的日志中包含请求url,因为我已经提到过,你可以将它作为参数传递给你的方法。这种方式也很简单,因为我不完全理解你在做什么。我特别不想将它传递给我的资源。我需要传递它通过至少50个函数完成。如果我这样做了,您可以将它传递给包含这些函数的类,没有其他方法,但是我可以在不同的线程上有多个请求,因此任何“全局函数”(在类中)都无法工作
  @Context
private HttpServletRequest httpRequest;

  @GET  
  public Response foo() {  
    someMethod(httpRequest); //or whatever else you want to do with it
  }
}