【问题标题】:Getting Access to HttpServletRequest object in restful web service在 RESTful Web 服务中访问 HttpServletRequest 对象
【发布时间】:2011-12-13 23:08:33
【问题描述】:

我可以通过如下方式访问soap web 服务中的HttpServlet Request 对象: 在服务实现中为 WebServiceContext 声明一个私有字段,并将其注解为资源:

@Resource
private WebServiceContext context;

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

MessageContext ctx = context.getMessageContext();
HttpServletRequest request =(HttpServletRequest)ctx.get(AbstractHTTPDestination.HTTP_REQUEST);

但是这些东西在一个安静的网络服务中是行不通的。 我正在使用 Apache CXF 开发宁静的 Web 服务。请告诉我如何访问 HttpServletRequest 对象。

【问题讨论】:

    标签: java web-services rest cxf restful-authentication


    【解决方案1】:

    将此代码用于访问请求和每个请求的响应:

    @Path("/User")
    public class RestClass{
    
        @GET
        @Path("/getUserInfo")
        @Produces(MediaType.APPLICATION_JSON)
        public Response getUserrDetails(@Context HttpServletRequest request,
                @Context HttpServletResponse response) {
            String username = request.getParameter("txt_username");
            String password = request.getParameter("txt_password");
            System.out.println(username);
            System.out.println(password);
    
            User user = new User(username, password);
    
            return Response.ok().status(200).entity(user).build();
        }
    ... 
    }
    

    【讨论】:

      【解决方案2】:

      我建议使用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()
      

      您可以使用@Context 注释来标记其他类型(例如 ServletContext 或专门的 HttpServletRequest)。见Context Annotations.

      【讨论】:

      • 在 Jersey 实现中,MessageContext 不起作用。但是你仍然可以使用@Context HttpServletRequest
      • 我无法让您的示例生效。我只能通过将 HttpServletRequest 添加为使用 @Context 注释装饰的方法参数来获得对它的引用,如下所示。
      猜你喜欢
      • 2010-09-13
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      • 1970-01-01
      相关资源
      最近更新 更多