Como extrair o MimeType de um byte

Eu tenho uma página da web que pode ser usada para fazer upload de arquivos.
Agora preciso verificar se o tipo de arquivo está correto (zip, jpg, pdf, …).

Eu posso usar o mimeType que vem com o pedido, mas eu não confio no usuário e digamos que eu quero ter certeza de que ninguém é capaz de fazer upload de um arquivo .gif que foi renomeado em .jpg
Eu acho que neste caso eu deveria inspecionar o número mágico .
Esta é uma biblioteca java que eu descobri que parece conseguir o que eu preciso ‘extrair o mimetype do número mágico’.
Esta é uma solução correta ou o que você sugere?

ATUALIZAÇÃO: Encontrei o projeto mime-util e parece muito bom e atualizado! (talvez melhor que o Java Mime Magic Library?)
Aqui está uma lista de projetos utilitários que podem ajudá-lo a extrair tipos de mime

Tente a Biblioteca Mágica do Java Mime

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

Tenho certeza de que a biblioteca postada pelo @sfussenegger é a melhor solução, mas eu faço isso com o seguinte snippet que espero que possa ajudá-lo.

 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 } }); 

Saudações.

PD: O melhor de tudo é que não tem dependência. PD2: Nenhuma garantia sobre sua correção! PD3: “desconocido” significa “desconhecido” (em espanhol)

A estrutura de ativação é a resposta da Sun para isso . E você pode ter isso já no caminho de class do seu servidor de aplicativos