SOAP Message Header에서 클라이언트 IP 조회
SOAP 서버의 보안 강화를 위해서 Authentication기능이나 IP Blocking 기능을 적용하여 접근 제어를 구현하게 되죠.
두가지 방법을 소개합니다.
1. Axis에서 handler 추가하기
- 아래 소스를 handler에 추가하여 접속 클라이언트의 IP 정보를 조회할 수 있다.
import org.apache.axis.AxisFault;
import org.apache.axis.Message;
import org.apache.axis.MessageContext;
import org.apache.axis.message.SOAPEnvelope;
import org.apache.axis.transport.http.HTTPConstants;
import org.apache.axis.handlers.BasicHandler;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import javax.servlet.http.HttpServletRequest;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPHeaderElement;
import javax.xml.soap.Name;
public class RemoteAddrHandler extends BasicHandler {
protected final Log log = LogFactory.getLog(this.getClass());
public RemoteAddrHandler () {
log.info(“Creating RemoteAddress Handler”);
}
public void invoke(MessageContext msgContext)
throws AxisFault {
Message requestMessage = msgContext.getRequestMessage();
HttpServletRequest req = (HttpServletRequest)
msgContext.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);
try {
String remoteAddr = req.getRemoteAddr();
log.info(“REMOTE IP is : “ + remoteAddr);
SOAPEnvelope envelope = requestMessage.getSOAPEnvelope();
SOAPHeaderElement header =
requestMessage.getSOAPHeader().addHeaderElement(
envelope.createName("AuthenticationInfo"));
SOAPElement node = header.addChildElement("REMOTE-IP");
node.addTextNode(remoteAddr);
} catch (SOAPException e) {
log.info(e.getMessage());
}
}
}
2. Axis2에서는 inOut클래스에 적용하기
import org.apache.axis2.context.MessageContext;
String remoteAddress =
(String)msgCtx.getProperty(MessageContext.REMOTE_ADDR):
두가지 방법을 고려하여 Client IP를 조회하여 블럭킹 기능을 적용하면 됩니다.








