有没有办法以编程方式获取请求(HttpServletRequest?)?我只能在端点方法/类上找到如何使用注释。
Per https://stackoverflow.com/a/5118844/190164我可以在我的端点添加带注释的参数:
user = UserData.objects.get(id=2)
print user.first_name // it will print first name of user
或者我可以在课堂上注入(https://stackoverflow.com/a/26181971/190164)
@POST
@Path("/test")
@Produces(MediaType.APPLICATION_JSON)
public String showTime(
@Context HttpServletRequest httpRequest
) {
// The method body
}
但我想在另一个没有直接链接到泽西岛的班级中访问该请求。像上面第二个例子中那样添加@Context注入并不起作用,因为这个类没有被Jersey实例化。我希望能够做一些像
这样的事情public class MyResource {
@Context
private HttpServletRequest httpRequest;
@GET
public Response foo() {
httpRequest.getContentType(); //or whatever else you want to do with it
}
}
但我还没有找到任何静态方法。
答案 0 :(得分:1)
如果您正在寻找一些安全解决方案,您可以使用servlet过滤器(创建实现Filter
的类),或者您可以实现ContainerRequestFilter
并通过覆盖filter
来执行过滤。外部过滤器上下文元素始终只能在控制器(放置路径注释的位置)中访问,除了将其传递给所需的方法或对象之外,无法从控制器外部访问此类型的内容:
@Context
private HttpServletRequest httpRequest;
@GET
public Response foo() {
someMethod(httpRequest); //or whatever else you want to do with it
}
}
希望这会有所帮助。