在restful Web服务中访问HttpServletRequest对象

Sur*_*rya 14 java rest web-services cxf restful-authentication

我可以在soap Web服务中访问HttpServlet Request对象,如下所示:在服务实现中为WebServiceContext声明一个私有字段,并将其注释为资源:

@Resource
private WebServiceContext context;
Run Code Online (Sandbox Code Playgroud)

要获取HttpServletRequet对象,我编写如下代码:

MessageContext ctx = context.getMessageContext();
HttpServletRequest request =(HttpServletRequest)ctx.get(AbstractHTTPDestination.HTTP_REQUEST);
Run Code Online (Sandbox Code Playgroud)

但这些东西并不适用于宁静的Web服务.我正在使用Apache CXF开发restful web服务.请告诉我如何才能访问HttpServletRequest对象.

kev*_*nsz 14

我建议使用 org.apache.cxf.jaxrs.ext.MessageContext

import javax.ws.rs.core.Context;
import org.apache.cxf.jaxrs.ext.MessageContext;

...
// add the attribute to your implementation
@Context 
private MessageContext context;

...
// then you can access the request/response/session etc in your methods
HttpServletRequest req = context.getHttpServletRequest();
HttpServletResponse res = context.getHttpServletResponse()
Run Code Online (Sandbox Code Playgroud)

您可以使用@Context注释来标记其他类型(例如ServletContext或HttpServletRequest).请参阅上下文注释.

  • 在Jersey实现中,`MessageContext`不起作用.但你仍然可以使用`@Context HttpServletRequest`. (4认同)