<< 2008년 7월 14일 (월) | | 2008년 7월 16일 (수) >>

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를 조회하여 블럭킹 기능을 적용하면 됩니다.