Java Web Services - SOAP Temas Adicionales
Se pueden encontrar ejemplos en https://github.com/ldebello/javacuriosities/tree/master/JavaEE/JavaWebServices
2. Handlers I
Son interceptores de mensajes, que son fácilmente adaptables a JAX-WS.
Hay dos tipos de handlers, estos pueden ser lógicos o de protocolo. Los
handler de protocolo dejan acceder a todo el contexto y los lógicos solo al
payload.
Java Web Services
3. Handlers II
Dependiendo el tipo de handler se ejecutaran antes o después, esto
también varia si el mensaje es entrante o saliente.
Java Web Services
4. Handlers III
Dependiendo que tipo de Handler deseamos, debemos implementar una o
otra clase y los objetos devueltos son distintos.
Java Web Services
Logical handler SOAP handler
extends javax.xml.ws.handler.LogicalHandler javax.xml.ws.handler.soap.SOAPHandler
message context javax.xml.ws.handler.LogicalMessageContext javax.xml.ws.handler.soap.SOAPMessageContext
getMessage() of message context gives javax.xml.ws.LogicalMessage javax.xml.soap.SOAPMessage
5. MTOM (Message Transmission Optimization Mechanism)
MTOM es un WFS(Web Feature Service) el cual provee un forma eficiente
de transmitir datos binarios sobre Web Services como datos.
Nota: MTOM solo funciona cuando ambas partes lo soportan.
Formas de Activar MTOM:
- Anotación @MTOM
- sun-jaxws-xml
Java Web Services
6. MTOM Threshold
Existe ciertos escenarios donde queremos activar MTOM solo cuando el
tamaño supere cierto limite, porque si tenemos muchos archivos pequeños
este feature puede afectar la performance en lugar de mejorarla.
Tenemos dos formas de poner control sobre esto
- Agregar el parámetro a la anotación como por ejemplo
@MTOM(threshold=3000)
- Agregar el parámetro a la hora de crear el servicio, como por ejemplo new
MTOMFeature(3000)
Java Web Services
7. WS-Security
El WS-Security es una extensión del protocolo SOAP que define
mecanismos para proteger la integridad y confidencialidad de los
mensajes, tenemos varios mecanismos distintos.
Esto es definido por WSIT el cual implementa las especificaciones WS-I, la
cual incluye la parte de seguridad.
Herramienta Ant:
http://wsitbt.codeplex.com/
Java Web Services
8. UsernameToken I
UsernameToken provee un standard para representar el usuario y la
password, esto puede ser texto plano o informacion encriptada. La
informacion viaja en el SOAP Header.
Puntos a tener en cuenta:
- Dependiendo donde estemos los XML Namespace serán distintos
- Client: http://schemas.sun.com/2006/03/wss/client
- Server: http://schemas.sun.com/2006/03/wss/server
- El Policy namespace apunta a:
- http://java.sun.com/xml/ns/wsit/policy
- Puede ser configurado sobre el WSDL o podemos usar archivos separados
llamados wsit-*.xml.
- Metro provee dos opciones para la validacion del lado servidor
- Container Based: Esto es si lo maneja el container por ejemplo, si lo
configuramos en tomcat-users.xml
- Validation Handler Class: Definimos una clase que valida estos datos
Java Web Services
9. UsernameToken II
Java Web Services
Vamos a crear nuestro propio validador implementando
"PasswordValidationCallback.PasswordValidator".
Lado Servidor:
Para poder configurar la seguridad debemos tener el archivo "wsit-
<Paquete al Implementor>.xml" en la carpeta "WEB-INF".
Lado Cliente:
Debemos incluir la librería Metro
Debemos crear el archivo client-security-env.properties en el raiz.
10. Certificados X509
Java Web Services
Si deseamos trabajar con certificados debemos tener la clave publica, si
nosotros necesitamos generar tanto la publica como la privada podemos
usar la herramienta keytool incluida en el JDK.
keytool -genkey -alias serviceKey -keypass mykeypass -keystore
wsKeyStore.jks -storepass wsdata -keyalg RSA -dname "CN=Cosme
Fulanito, OU=Web Service, O=EducacionIT, L=BS, ST=CF, C=AR"
Explicación:
- alias: Nombre con el que haremos referencia al par de claves creado.
- keypass: Es la clave con la que podremos acceder a la clave privada del par de claves
creado.
- keystore: Es en almacén de certificados con claves privadas.
- storepass: Clave para acceder a nuestro keystore.
- keyalg: Algoritmo usado para la creación
- dname: CN=Nombre y Apellido, OU=Unidad de Organización, O=Nombre de la
organización, L=Localidad, ST=Estado o provincia, C=Codigo país dos letras.
11. Exportar certificados públicos
Java Web Services
Luego debemos exportar el certificado publico
keytool -export -alias serviceKey -keypass mykeypass -keystore
wsKeyStore.jks -storepass wsdata -file certificadoPublico.cer
Luego debemos agregar el certificado a nuestro truststore (Almacén de
claves publicas)
keytool -import -alias certificadoPublico -keystore wsTrustStore.jks -
storepass wsclient -file certificadoPublico.cer