Apache CXF 中的 HTTPServletRequest 等价物
HTTPServletRequest equivalent in Apache CXF
所以我想知道我的 Web 服务的客户端的区域设置或 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);
我觉得protocol header中肯定有这个信息,顺便没查过。但是如何在网络服务中获取它。
注意:我想避免 getting/setting cxf 请求上下文中的内容。
您需要将 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);
希望对您有所帮助。
所以我想知道我的 Web 服务的客户端的区域设置或 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);
我觉得protocol header中肯定有这个信息,顺便没查过。但是如何在网络服务中获取它。
注意:我想避免 getting/setting cxf 请求上下文中的内容。
您需要将 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);
希望对您有所帮助。