martes, 6 de enero de 2009

Pasos para utilizar JBossWS Con Seguridad a Nivel Mensaje

Nota: Esta entrada fue migrada a mi nuevo sitio de Programación Java. Instalar JBossAS 4.2.3.GA
Para instalar JbossAS 4.2.3.GA:
• Ingresar a http://www.jboss.org/jbossas/downloads/
• Buscar la versión deseada (en nuestro caso, 4.2.3.GA).
• Hacer click en “Download”
• Descomprimir el zip en algún lugar del disco siendo ésa, nuestra carpeta de instalación (desde acá, nos referiremos a la carpeta de instalación de JBoss como JBOSS_HOME)
Instalar JbossWS 3.0.5.GA
La versión 4.2.3.GA de JBoss viene con jbossws-3.0.1.GA.
Para instalar la última versión de JbossWS (al día de hoy, 3.0.5.GA) debemos:
• Ingresar a http://www.jboss.org/jbossws/downloads/
• Descargar la versión deseada (en nuestro caso, native-3.0.5.GA)
• Hacer click en “Download”
• Descomprimir el zip en alguna carpeta temporal
• Copiar el archivo ant.properties.example a ant.properties.
• Modificar el archivo ant.properties con los datos en negrita:
#
# A sample ant properties file
#

# Optional JBoss Home
jboss422.home=@jboss422.home@
jboss423.home=JBOSS_HOME
jboss424.home=@jboss424.home@
jboss500.home=@jboss500.home@
jboss501.home=@jboss501.home@
jboss510.home=@jboss510.home@

# The JBoss server under test. This can be [jboss422|jboss423|jboss424|jboss500|jboss501|jboss510]
jbossws.integration.target=jboss423

# The JBoss settings
jboss.server.instance=all
jboss.bind.address=localhost

# JBoss Repository
#jboss.repository=file:/home/tdiesler/svn/jboss.local.repository
jboss.repository=http://repository.jboss.org

# JBoss JMX invoker authentication
#jmx.authentication.username=admin
#jmx.authentication.password=admin

# Java Compiler options
javac.debug=yes
javac.deprecation=no
javac.fail.onerror=yes
javac.verbose=no
• Parado en el directorio raíz, ejecutar: ant deploy-jboss423
Creando un Proyecto Web Service
En principio, estas indicaciones son para el uso de WTP 2.0.4 (Eclipse plugin). Como, en nuestro entorno, también usamos MyEclipse, voy a tratar de hacerlo lo más genérico posible.
• Crear un proyecto Web (en mi caso, lo nombré test-jbossws).
• Crear la clase example.impl.SampleServiceImpl y la clase example.bean.Person:
package example.impl;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;

import org.jboss.ws.annotation.EndpointConfig;

import example.bean.Person;

@WebService
@SOAPBinding ( parameterStyle = SOAPBinding.ParameterStyle.BARE )
public class SampleServiceImpl {

@WebMethod
public Person getPerson(String dni) {

return new Person(dni, "Peter Capusotto", 45);

}



}

package example.bean;

public class Person {

private String dni;
private String name;
private int yearsOld;

public Person(){super();}

public Person(String dni, String name, int yearsOld) {
this.dni = dni;
this.name = name;
this.yearsOld = yearsOld;
}
public String getDni() {
return dni;
}
public void setDni(String dni) {
this.dni = dni;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getYearsOld() {
return yearsOld;
}
public void setYearsOld(int yearsOld) {
this.yearsOld = yearsOld;
}

@Override
public String toString() {

return this.name + " DNI: " + this.dni;
}
}
• Para que el proyecto compile, se deben agregar los siguientes jars:
o %JBOSS_HOME%/server/all/lib/jboss-native-jaxws.jar
o %JBOSS_HOME%/server/all/deploy/jbossws.sar/jboss-native-core.jar
Importante: los jars no deben ser empaquetados en el war.
o MyEclipse: para no exportar los jars
• Pararse sobre el proyecto y dar click derecho
• Propiedades -> MyEclipse ->Web
• Seleccionar el tab “Deployment”
• Tildar “Ignore dependant Java projects…” y destildar el resto.
• Levantar el servidor.
• Ir a algún navegador y ejecutar: http://localhost:8080/test-jbossws?wsdl
• Deberían ver la definición del servicio (un XML).
Creando un Cliente de Web Service
• Crear un proyecto Java. Yo lo nombré test-jbossws-client.
• Dentro del proyecto, ejecutar %JBOSS_HOME%/bin/wsconsume.bat –k –o http://localhost:8080/test-jbossws?wsdl
• Copiar la estructura que se ha creado dentro de “generated” a la carpeta donde tenemos el resto de los fuentes.
• Crear un testcase. Yo lo llamé example.WSTest:
package example;

import javax.xml.ws.Service;

import junit.framework.TestCase;
import example.impl.Person;
import example.impl.SampleServiceImpl;
import example.impl.SampleServiceImplService;

public class WSTest extends TestCase {

public void testWS() {
System.out.println("Starting Test...");
try {

Service service = new SampleServiceImplService();
SampleServiceImpl port = service.getPort(example.impl.SampleServiceImpl.class);

Person person = port.getPerson("27668277");
assertNotNull(person);
assertEquals("27668277",person.getDni());
System.out.printf("Name: %s, DNI: %s, Age: %d\n", person.getName(),person.getDni(),person.getYearsOld());
} catch (Exception e) {
e.printStackTrace();
assertNull(e.getMessage(),e);
} finally {

System.out.println("...The End");

}

}
}
• Agregar los jars:
o %JBOSS_HOME%/client/jaxb-api.jar
o %JBOSS_HOME%/client/jbossall-client.jar
o %JBOSS_HOME%/client/jboss-native-client.jar
o %JBOSS_HOME%/client/jboss-native-jaxws.jar
o Mail.jar
o Xalan.jar
o xercesImpl.jar
• Correr el caso de prueba.
• El test da “verde”.
Agregando Seguridad
Agregando seguridad en el servidor
En la clase que define el Web Service, agregar la annotation @EndpointConfig como muestra el ejemplo:

@WebService
@SOAPBinding ( parameterStyle = SOAPBinding.ParameterStyle.BARE )
@EnpointConfig( configName = “Standard WSSecurity Endpoint” )
public class SampleServiceImpl {

Dentro de la carpeta WEB-INF se debe agregar el archivo jboss-wsse-server.xml:



C:\workspace-ws\test-jbossws-certificates\wssop.keystore
wssoppwd
C:\workspace-ws\test-jbossws-certificates\wssop.trustore
wssoppwd










Agregando seguridad en el cliente
En la carpeta donde están los fuentes (o bien en la raíz del proyecto) debemos crear la carpeta META-INF con dos archivos: jboss-wsse-client.xml y standard-jaxws-client-config.xml.

standard-jaxws-client-config.xml:


xsi:schemaLocation="urn:jboss:jaxws-config:2.0 jaxws-config_2_0.xsd">


Standard WSSecurity Client


##SOAP11_HTTP

WSSecurityHandlerOutbound
org.jboss.ws.extensions.security.jaxws.WSSecurityHandlerClient






jboss-wsse-client.xml:


xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.jboss.com/ws-security/config
http://www.jboss.com/ws-security/schema/jboss-ws-security_1_0.xsd">

C:\workspace-ws\test-jbossws-certificates\user1.keystore
user1pwd
C:\workspace-ws\test-jbossws-certificates\user1.keystore
C:\workspace-ws\test-jbossws-certificates\user1.trustore
user1pwd


alias="user1"/>






Referencias
Instalación JbossWS: http://jbossws.jboss.org/mediawiki/index.php?title=Install_JBossWS

No hay comentarios.:

Publicar un comentario