2010-04-15 43 views
6

¿cómo se obtiene la fuente IP, nombre de usuario, contraseña, etc. de la máquina cliente que envía una solicitud de jabón? ¿Hay alguno de estos detalles que uno pueda extraer para fines de registro?¿Cómo obtengo la IP de origen de una máquina cliente que solicita SOAP?

Estoy usando Java para manejar las solicitudes SOAP entrantes. El servicio simplemente agrega 2 números y está funcionando, pero solo necesito obtener algunos detalles del cliente.

Gracias, Lavanya

Respuesta

0

no estoy Surte entiendo completamente su idea de conseguir nombre y contraseña de la máquina cliente. En general, con Soap Header, se supone que llevan la información de autenticación (que podría ser nombre de usuario, contraseña o algún tipo de toke de seguridad). Para el IP, su Soap está llegando a través de Http y, por lo tanto, cuando reciba su solicitud, puede intentar y ver sus encabezados Http para ver qué información le brinda. Aunque nunca he intentado obtener la dirección IP del cliente, pero podría estar allí en el encabezado HTTP

+0

parece que tendré que intentar y usar ese objeto de encabezado HTTP. ¿Hay metadatos en el encabezado que se pasan por defecto o es estrictamente lo que pones en el encabezado? – user450937

0

Qué pila de jabón está usando. Si lo implementó como un archivo war utilizando eje, es bastante fácil hacerlo. necesita obtener el httprequestobject y llamar al método HTTPServletRequest.getRemoteAddr().

+0

el servicio se está ejecutando como un archivo .jar. Luego uso mi archivo WSDL para crear y lanzar solicitudes. – user450937

17

Si está utilizando JAX-WS, inyectar una WebServiceContext así:

import javax.annotation.Resource 
import javax.jws.WebMethod; 
import javax.jws.WebService; 
import javax.servlet.http.HttpServletRequest; 
import javax.xml.ws.WebServiceContext; 
import javax.xml.ws.handler.MessageContext; 


@WebService() 
public class Test 
{ 
    @Resource WebServiceContext context; 

    @WebMethod(operationName = "getInfo") 
    public String getInfo() 
    { 
    HttpServletRequest request = (HttpServletRequest)context.getMessageContext().get(MessageContext.SERVLET_REQUEST); 
    return "IP: "+request.getRemoteAddr()+", Port: "+request.getRemotePort()+", Host: "+request.getRemoteHost(); 
    } 
} 

¿Se volverá algo como:

IP: 127.0.0.1, Port: 2636, Host: localhost

Mira el API para el resto de los métodos . Básicamente, una vez que tenga su objeto HttpServletRequest, el resto es bastante fácil.

+2

Esta respuesta debe ser aceptada. ¡Utilicé este enfoque y funciona perfectamente! – membersound

+0

Estoy usando el siguiente método, pero no me parece que funcione correctamente. ¿Tiene algún ejemplo de uso de la clase mencionada? Sería muy útil. – Saikat1529

+0

@ Saikat1529 dado que esta respuesta tiene más de 7 años, le sugiero que haga una nueva pregunta – Catchwa

0

He descubierto la solución, como a continuación -

@Endpoint 
public class DataEndpoints { 
.... 
.... 
    private HttpServletRequest httpServletRequest; 

    @Autowired 
    public void setRequest(HttpServletRequest request) { 
     this.httpServletRequest = request; 
    } 


    @PayloadRoot(namespace = employeeNS, localPart = "syncRelation") 
    @ResponsePayload 
    public SyncRelationResponse dataSync(@RequestPayload SyncOrderRelation request) { 
      String incoming = "IP Address -> " + this.httpServletRequest.getRemoteAddr(); 
    } 
} 

Al utilizar el siguiente método, que puede acceder directamente HttpServletRequest. Y luego puedo acceder a todos los datos que necesito.

Espero que ayude a alguien en este contexto.

Cuestiones relacionadas