Apache CXF中的HTTPServletRequest等价物

时间:2015-08-07 08:15:46

标签: java spring cxf

所以我想知道我的网络服务的客户端的区域设置或ip等。我如何获得它?

我的终端方法:

@POST
    @Produces({MediaType.APPLICATION_JSON})
    @Consumes({MediaType.APPLICATION_JSON})
    @Path("/{EmployeeID}/Shifts/{ShiftID}/Confirm")
    public Response confirmShift(@PathParam("EmployeeID")String employeeId, String params, @PathParam("ShiftID")String tbId);

我如何在拦截器中获取它:

Map<String, List> headers = (Map<String, List>) message.get(Message.PROTOCOL_HEADERS);

我认为协议标题必须包含此信息,我还没有检查过它。但是我如何在网络服务中获得它。

注意:我想避免在cxf请求上下文中获取/设置内容。

1 个答案:

答案 0 :(得分:8)

您需要将MessageContext注入到包含HTTP servlet请求的方法中。

例如:

@POST
@Produces({MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_JSON})
@Path("/{EmployeeID}/Shifts/{ShiftID}/Confirm")
public Response confirmShift(@PathParam("EmployeeID") String employeeId,
                             String params,
                             @PathParam("ShiftID") String tbId,
                             @Context MessageContext context){
    HttpServletRequest request = context.getHttpServletRequest();
    String ip = request.getRemoteAddr();

    /** ..... **/
}

还有其他一些获取HTTP servlet请求的方法,一种是:

    Message message = PhaseInterceptorChain.getCurrentMessage();
    HttpServletRequest httpRequest = (HttpServletRequest) message.get(AbstractHTTPDestination.HTTP_REQUEST);

希望这有帮助。