IntroducaoOne Touch SDK e um kit de desenvolvimento da DigitalPersona para autenticacao de impressoes digitais.Simplficando, podemos resumir nos seguintes procedimentos:1- Registro do Template;2- Captura do Template;3- Comparacao do Registro com a Captura;Registro do Template e a coleta de uma ou mais impressoes digitais para formar um padrao de template que possa ser usado para futuras comparacoes (match). E ela que vamos guardar em alguma base de dados.Captura do Template e a coleta de uma digital para formacao de um template e comparacao com outro template que ja temos em uma base de dados.Comparacao do Registro com a Captura e o processo de verificacao se o Registro feito anteriormente "casa" (match) com o Capturado. (Autenticacao Um para Um)Existe outro processo chamado Um para Muitos.O que e necessario ?1- Faca o download da One Touch SDK2- Voce vai precisar de um leitor de impressoes digitais da DigitalPersona*. Utilizei o Leitor U.are.U 4000B:*Caso voce ja tenha leitores de outros fornecedores ou nao queira utilizar os da DigitalPersona, voce tera que utilizar outras SDK como a Griaule - Fingerprint SDK, so preste atencao na questao do licenciamento.DesenvolvimentoPara uma aplicacao web, voce pode desenvolver uma applet para efetuar o registro e captura das digitais e enviar como um campo normal de texto para servidor. Essa applet tambem pode ser disponibilizada para aplicacoes clientes para enviar o template no padrao da sua aplicacao e assim, com todos os requisitos de seguranca necessarios.Registro do TemplateTrecho para efetuar o registro da digital:DPFPEnrollmentControl newContentPane = new DPFPEnrollmentControl();newContentPane.addEnrollmentListener(new DPFPEnrollmentListener() { @Override public void fingerDeleted(DPFPEnrollmentEvent evento) throws DPFPEnrollmentVetoException { // ... } @Override public void fingerEnrolled(final DPFPEnrollmentEvent evento) throws DPFPEnrollmentVetoException { SwingUtilities.invokeLater(new Runnable() { public void run() { dispareAoCapturar(evento.getTemplate()); } }); evento.setStopCapture(true); }});this.setLayout(new BorderLayout());this.add(newContentPane, BorderLayout.CENTER);Agora e so implementar o metodo dispareAoCapturar. Ele recebe um objeto do tipo DPFPTemplate, que tem um metodo serialize() que retorna um array de bytes.Voce pode implementar um Listener integrando a Applet com o Javascript de um pagina e receber o evento da applet:private void dispareAoCapturar(DPFPTemplate template) { if(listener != null) { listener.aoObterTemplate(Util.bytesToHex(template.serialize())); }}...public interface TemplateListener { void aoObterTemplate(String template);}...public class MainApplet extends JApplet implements TemplateListener { @Override public void aoObterTemplate(String template) { try { // dispando para o javascript JSObject win = JSObject.getWindow(this); win.call("aoObterTemplate", new Object[] { template }); } catch (Exception e) { // TODO: tratar exception dentro da applet e.printStackTrace(); } } } ...Pagina:function aoObterTemplate(template) { document.getElementById("formulario:template").value = template;}Estou transformando o array bytes em uma String no formato Hexa para melhor trafegar dentro do request e ficar mais simples a sua manipulacao, mas voce pode usar qualquer outro formato (base64, decimal, etc). Nesse momento, voce tambem pode incluir algum algoritmo de encriptacao no template.Captura do TemplateO mesmo pode ser feito para efetuar a captura da digital:try { // lista de leitores instalados na maquina DPFPReadersCollection readers = DPFPGlobal.getReadersFactory() .getReaders(); // inicializa o objeto capture DPFPCapture capturer = DPFPGlobal.getCaptureFactory() .createCapture(); capturer.setReaderSerialNumber(readers.get(0).getSerialNumber()); capturer.setPriority(DPFPCapturePriority.CAPTURE_PRIORITY_LOW); // adiciona um listener para observer ao capturar uma digital capturer.addDataListener(new DPFPDataListener() { public void dataAcquired(final DPFPDataEvent e) { if (e != null && e.getSample() != null) { SwingUtilities.invokeLater(new Runnable() { public void run() {