Cómo extraer MimeType de un byte

Tengo una página web que se puede usar para subir archivos.
Ahora necesito verificar si el tipo de archivo es correcto (zip, jpg, pdf, …).

Puedo usar el mimeType que viene con la solicitud, pero no confío en el usuario y digamos que quiero asegurarme de que nadie pueda subir un archivo .gif que haya sido renombrado en .jpg
Creo que en este caso debería inspeccionar el número mágico .
Esta es una biblioteca de Java que he encontrado que parece lograr lo que necesito ‘extraer el tipo mimético del número mágico’.
¿Es esta una solución correcta o qué sugieres?

ACTUALIZACIÓN: ¡He encontrado el proyecto mime-util y parece muy bueno y actualizado! (¿Tal vez mejor que Java Mime Magic Library?)
Aquí hay una lista de proyectos de utilidad que pueden ayudarlo a extraer tipos de mimo

Pruebe la Biblioteca Mágica Java Mime

byte[] data = ... MagicMatch match = Magic.getMagicMatch(data); String mimeType = match.getMimeType(); 

Estoy seguro de que la biblioteca publicada por @sfussenegger es la mejor solución, pero lo hago a mano con el siguiente fragmento que espero que pueda ayudarlo.

 DESCONOCIDO("desconocido", new byte[][] {}), PDF("PDF", new byte[][] { { 0x25, 0x50, 0x44, 0x46 } }), JPG("JPG", new byte[][] { { (byte) 0xff, (byte) 0xd8, (byte) 0xff, (byte) 0xe0 } }), RAR("RAR", new byte[][] { { 0x52, 0x61, 0x72, 0x21 } }), GIF("GIF", new byte[][] { { 0x47, 0x49, 0x46, 0x38 } }), PNG("PNG", new byte[][] { { (byte) 0x89, 0x50, 0x4e, 0x47 } }), ZIP("ZIP", new byte[][] { { 0x50, 0x4b } }), TIFF( "TIFF", new byte[][] { { 0x49, 0x49 }, { 0x4D, 0x4D } }), BMP( "BMP", new byte[][] { { 0x42, 0x4d } }); 

Saludos.

PD: Lo mejor es que no tiene ninguna dependencia. PD2: ¡No hay garantía sobre su corrección! PD3: “desconocido” significa “desconocido” (en español)

El marco de activación es la respuesta de Sun a esto . Y es posible que ya tengas esto en la ruta de clase de tu servidor de aplicaciones