Estoy implementando un servicio web RESTful donde el usuario tiene que enviar un token de verificación firmado junto con la solicitud para poder asegurarme de que la solicitud no ha sido manipulada por un intermediario. Mi implementación actual es la siguiente.
El token de verificación es un objeto VerifData serializado en una cadena y luego codificado y cifrado.
class VerifData {
int prop1;
int prop2;
}
En mi servicio, coloco los datos para serializarlos en una instancia de VerifData y luego los serializo usando Jackson ObjectMapper y los paso al motor de verificación junto con el token de verificación.
VerfiData verifData = new VerifData(12345, 67890);
ObjectMapper mapper = new ObjectMapper();
String verifCodeGenerated = mapper.writeValueAsString(verifData);
Pero parece que cada vez que se inicia el contenedor de la aplicación, cambia el orden de las propiedades que ObjectMapper asigna a una cadena.
Ej: una vez sería
{"prop1":12345,"prop2":67890}
y en otra ocasión sería
{"prop2":67890,"prop1":12345}
Entonces, si el cliente ha serializado la instancia VerifData como en la primera cadena, hay un 50% de posibilidades de que falle aunque sea correcta.
¿Hay alguna forma de evitar esto? ¿Puedo especificar el orden de las propiedades para mapear por ObjectMapper (como en orden ascendente)? ¿O hay alguna otra forma de implementar mejor este paso de verificación? Tanto las implementaciones de cliente como de servidor las desarrollo yo. Utilizo la API de seguridad de Java para firmar y verificar.