seguro consumir con certificado autenticacion java web-services jax-ws webservices-client jax-ws-customization

certificado - consumir web service java



WS Client con Proxy y Autentificación (4)

Sé que esta no es la forma correcta de hacer una pregunta, pero estoy teniendo un problema:

Tengo un wsdl almacenado localmente y necesito crear un cliente del servicio web para llamar a ese servicio web. El problema es que el servicio está detrás de un firewall y tengo que conectarme a él a través de un proxy y después de eso tengo que autenticarme para conectarme al WS.

Lo que hice fue generar WS Client con Apache CXF 2.4.6 y luego establecer un proxy de todo el sistema

System.getProperties().put("proxySet", "true"); System.getProperties().put("https.proxyHost", "10.10.10.10"); System.getProperties().put("https.proxyPort", "8080");

Sé que esto no es una buena práctica, así que sugiérele una mejor solución, y si alguien me puede dar un consejo sobre cómo configurar la autentificación, realmente lo aprecio.


Con apache CXF

HelloService hello = new HelloService(); HelloPortType helloPort = cliente.getHelloPort(); org.apache.cxf.endpoint.Client client = ClientProxy.getClient(helloPort); HTTPConduit http = (HTTPConduit) client.getConduit(); http.getClient().setProxyServer("proxy"); http.getClient().setProxyServerPort(8080); http.getProxyAuthorization().setUserName("user proxy"); http.getProxyAuthorization().setPassword("password proxy");


Aquí está la configuración Spring XML correspondiente:

Documentación: http://cxf.apache.org/docs/client-http-transport-including-ssl-support.html

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:http-conf="http://cxf.apache.org/transports/http/configuration" xmlns:sec="http://cxf.apache.org/configuration/security" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd http://cxf.apache.org/configuration/security http://cxf.apache.org/schemas/configuration/security.xsd"> <http-conf:conduit name="*.http-conduit"> <http-conf:client ProxyServer="proxy" ProxyServerPort="8080"/> <http-conf:proxyAuthorization> <sec:UserName>proxy_user</sec:UserName> <sec:Password>proxy_pass</sec:Password> </http-conf:proxyAuthorization> </http-conf:conduit>

Para que esto funcione, debe importar cxf.xml:

<import resource="classpath:META-INF/cxf/cxf.xml"/>

Tenga en cuenta que este httpConduit se habilitará para todos sus clientes CXF (si hay varios).

Debe configurar su nombre de conducto para que coincida solo con su servicio. Conducto:

name="{http://example.com/}HelloWorldServicePort.http-conduit"


Si está utilizando la configuración Spring Java, para configurar un cliente JAX-WS con Apache CXF (3.xx), el siguiente código funcionará:

import org.apache.cxf.endpoint.Client; import org.apache.cxf.frontend.ClientProxy; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; import org.apache.cxf.transport.http.HTTPConduit; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import de.codecentric.namespace.weatherservice.WeatherService; @Configuration public class WeatherServiceConfiguration { @Bean public WeatherService weatherService() { JaxWsProxyFactoryBean jaxWsFactory = new JaxWsProxyFactoryBean(); jaxWsFactory.setServiceClass(WeatherService.class); jaxWsFactory.setAddress("http://yourserviceurl.com/WeatherSoapService_1.0"); return (WeatherService) jaxWsFactory.create(); } @Bean public Client client() { Client client = ClientProxy.getClient(weatherService()); HTTPConduit http = (HTTPConduit) client.getConduit(); http.getClient().setProxyServer("yourproxy"); http.getClient().setProxyServerPort(8080); // your proxy-port return client; } }


También puede establecer el nombre de usuario y la contraseña del proxy usando la clase java.net.Authenticator, pero no estoy seguro si no es la configuración "de todo el sistema".

Mira aquí: proxy HTTP autenticado con Java