Mostrando postagens com marcador Applet. Mostrar todas as postagens
Mostrando postagens com marcador Applet. Mostrar todas as postagens

quinta-feira, 15 de julho de 2010

ClassNotFoundException em Applet

Algumas vezes, nos deparamos com o seguinte erro ao abrir um applet em um navegador:

load: class br.com.certificacao.TokenSignerApplet.class not found.
java.lang.ClassNotFoundException: br.com.certificacao.TokenSignerApplet.class
 at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
 at java.lang.ClassLoader.loadClass(Unknown Source)
 at java.lang.ClassLoader.loadClass(Unknown Source)
 at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
 at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
 at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
 at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: open HTTP connection failed:http://192.168.0.5:8082/certificaApp/br/com/certificacao/TokenSignerApplet/class.class
 at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source)
 at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source)
 at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source)
 at java.security.AccessController.doPrivileged(Native Method)
 ... 7 more
Exception: java.lang.ClassNotFoundException: br.com.certificacao.TokenSignerApplet.class
load: class br.com.certificacao.TokenSignerApplet.class not found.
java.lang.ClassNotFoundException: br.com.certificacao.TokenSignerApplet.class
 at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
 at java.lang.ClassLoader.loadClass(Unknown Source)
 at java.lang.ClassLoader.loadClass(Unknown Source)
 at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
 at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
 at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
 at java.lang.Thread.run(Unknown Source)
Caused by: java.io.IOException: open HTTP connection failed:http://192.168.0.5:8082/certificaApp/br/com/certificacao/TokenSignerApplet/class.class
 at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source)
 at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source)
 at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source)
 at java.security.AccessController.doPrivileged(Native Method)
 ... 7 more
Exception: java.lang.ClassNotFoundException: br.com.certificacao.TokenSignerApplet.class



No meu caso, sofri com isso usando o Internet Explorer. Se isso acontecer com você, tente as seguintes situações:
  1. Utilizar outro browser ( ou outra versão do seu browser);
  2. Tentar desabilitar o uso de proxy (pode ser que o proxy esteja barrando alguma coisa relacionada ao uso de applets, neste caso, você terá que solicitar ao gerente da rede um ajuste no proxy);
  3. Trocar a ordem dos parâmetros java_code e java_archive , deixando o java_archive antes.
    <param name="java_archive" value="TokenSignerApplet.jar, bcprov-jdk14-138.jar, iText-2.0.8.jar">
    
    <param name="java_code" value="br.com.certificacao.TokenSignerApplet.class">
    
    <param name="java_codebase" value="<%="http://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()%>">
    

terça-feira, 13 de julho de 2010

Código de applet para assinatura digital

Este simples código demonstra como disponibilizar uma applet que lê um token para assinar um documento digitalmente.
Merecem destaque as seguintes informações:


  • Os arquivos bcprov-jdk14-138.jar e iText-2.0.8.jar são utilizados para assinar o pdf gerado.

  • O arquivo TokenSignerApplet.jar contem a classe da applet

  • O parâmetro java_codebase é importante de configurar para não dar erro na localização dos arquivos com as classes.
<object
  classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
  codebase="" width="130" height="25" name="TokenSignerApplet">
  <param name="java_code" value="br.com.certificacao.TokenSignerApplet.class">
  <param name="java_codebase" value="<%="http://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()%>">
  <param name="java_archive" value="TokenSignerApplet.jar , bcprov-jdk14-138.jar , iText-2.0.8.jar">
  <param name="mayscript" value="true">
  <param name="type" value="application/x-java-applet;version=1.5">
  <param name="scriptable" value="false">
  <param name="signButtonCaption" value="Assinar Documento">
  <param name="pinCodeField" value="pinCode">
  <comment>
    <embed
      type="application/x-java-applet;version=1.5"
      java_code="br.com.ebiz.funasawf.web.certificacao.TokenSignerApplet.class"
      java_codebase="<%="http://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()%>" 
      java_archive="TokenSignerApplet.jar , bcprov-jdk14-138.jar , iText-2.0.8.jar"
      width="130" height="25" scriptable="true"
      pluginspage="http://java.sun.com/products/plugin/index.html#download"
      pinCodeField="pinCode"
      signButtonCaption="Assinar Documento"
    </embed>
    <noembed>
      Smart card signing applet can not be started because
      Java Plugin 1.5 or newer is not installed.
    </noembed>
  </comment>     
</object>

sexta-feira, 28 de maio de 2010

Assinatura de Applets

Primeiramente, é preciso gerar o arquivo com o applet que será assinado digitalmente. Para isso, use o comando:

jar -cvf TokenSignerApplet.jar br\com\certificacao\*.class

O próximo passo é gerar o arquivo de assinatura para o applet. Use o comando:

keytool -genkey -alias signFiles -keystore certificado.jks -keypass !secret -dname "CN=Company Name" -storepass !secret

Finalmente, assine o applet com o comando:

jarsigner -keystore certificado.jks -storepass !secret -keypass !secret TokenSignerApplet.jar signFiles