有的時候在webservice里我們需要獲取request對象和response對象,比如想要獲得客戶端的訪問ip的時候就需要這么做,下面說三種方式,當然三種方式可能是針對不同方式部署webservice獲取request對象的方法。
第一種:先配置注入:
@Resource private WebServiceContext webServiceContext;
其次是下面的代碼:
MessageContext mc = webServiceContext.getMessageContext(); HttpServletRequest request = (HttpServletRequest) (mc.get(MessageContext.SERVLET_REQUEST));
第二種:
WebServiceContext context = new WebServiceContextImpl(); MessageContext ctx = context.getMessageContext(); HttpServletRequest request = (HttpServletRequest) ctx.get(AbstractHTTPDestination.HTTP_REQUEST);
第三種(附帶獲取客戶端ip地址的方法):
Message message = PhaseInterceptorChain.getCurrentMessage();
HttpServletRequest request = (HttpServletRequest) message.get(AbstractHTTPDestination.HTTP_REQUEST);
獲取ip:
public static String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknow".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; }