适用于JAX-WS和JAX-RS服务,获取客户端代码如下:
Message message = PhaseInterceptorChain.getCurrentMessage();
HttpServletRequest request = (HttpServletRequest)message.get(AbstractHTTPDestination.HTTP_REQUEST);
request.getRemoteAddr()
应用案例代码:package com.student;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "Student")
public class Student {
private String name;
private String studentIP;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStudentIP() {
return studentIP;
}
public void setStudentIP(String studentIP) {
this.studentIP = studentIP;
}
}package com.student;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.PhaseInterceptorChain;
import org.apache.cxf.transport.http.AbstractHTTPDestination;
@Consumes("application/json")@ Produces("application/json")
public class ChangeStudentDetailsImpl implements ChangeStudentDetails {
@POST@ Path("/changeName")
public Student changeName(Student student) {
student.setName("HELLO " + student.getName());
// Here We Capture/Extracting Client IP Address Using CXF
Message message = PhaseInterceptorChain.getCurrentMessage();
HttpServletRequest request = (HttpServletRequest) message.get(AbstractHTTPDestination.HTTP_REQUEST);
student.setStudentIP(request.getRemoteAddr());
return student;
}
@GET@ Path("/getName")
public Student getName() {
Student student = new Student();
student.setName("Rockey");
return student;
}
}