Applet não executa JFileChooser (Acesso negado de leitura do user.home)

3 respostas
Hade

salve salve galera!

Seguinte, minha applet está assinada.. está sendo reconhecida pelo browser, ma hora de executar o JFileChooer pro usuário escolher qual arquivo digital vai assinar, dá excessão de permissão negada na leitura do diretório padrão do usuário.

tem muito tempo que estou tentando isso e já não tenho nem mais luz..... então vim parar aqui! segue o código abaixo.

a applet é iniciada junto com a jsp e é armada a thread que faz expirar a senha do smart card com o tempo.

a função que é chamada dentro do flex é a função launchEditor .. que abre um filechooser, seleciona um pdf, assina e carimba digitalmente e retorna a string encodada do novo pdf para eu armazernar no banco de dados.

mport java.applet.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import sun.misc.BASE64Encoder;

public class Launcher extends Applet {

    public static String senha;
    @Override
    public void init() {
        senha = null;
        ( new LauncherThread() ).start();
    }

    public String launchEditor() {
        File fonte = null;

        ConfigService cs = null;
        try {
          fonte = chooseFile();
            if (fonte != null) {
                if (fonte.getAbsolutePath().toLowerCase().endsWith(".pdf")) {
                    String saidaEncodada64 = null;
                    if(senha == null){
                        senha = jPasswordEncriptado();
                    }
                    if (!senha.equals("") && senha != null) {
                        AssinaCarimbaBry acb = new AssinaCarimbaBry();
                        File fileSaida = acb.assina(fonte, senha);
                        byte[] fileSaidaArrayBytes = getBytesFromFile(fileSaida);
                        saidaEncodada64 = encode64ToDB(fileSaidaArrayBytes);
                        String retorno = fonte.getName() + "?" + fonte.getAbsolutePath() + "?" + String.valueOf(fileSaida.length()) + "?" + saidaEncodada64;
                        fileSaida.delete();
                        return retorno;

                    } else {
                        JOptionPane.showMessageDialog(null, "Nenhuma senha foi digitada", "Erro", JOptionPane.ERROR_MESSAGE);
                        senha = null;
                        return null;
                    }
                } else {
                    JOptionPane.showMessageDialog(null, "Arquivo selecionado não é compatível com o Peticione", "Erro", JOptionPane.ERROR_MESSAGE);
                    return null;
                }
            } else {
                JOptionPane.showMessageDialog(null, "Nenhum Arquivo foi selecionado", "Erro", JOptionPane.ERROR_MESSAGE);
                return null;
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Windows - Acesso negado(" + e.getMessage() + ")");
        }
        return null;
    }

    public File chooseFile() {
        JFileChooser fc = new JFileChooser();
        fc.setAcceptAllFileFilterUsed(false);
        fc.setFileFilter(new FileFilterPDF());
        fc.setDialogTitle("Escolha o arquivo PDF para anexar");

        if (fc.showDialog(null, "Carregar Arquivo") == JFileChooser.APPROVE_OPTION) {
            //try {
            File fonte = null;
            fonte = fc.getSelectedFile();
            return fonte;
        } else {
            return null;
        }
    }

    public byte[] getBytesFromFile(File file) throws IOException {
        InputStream is = new FileInputStream(file);
        long length = file.length();
        byte[] bytes = new byte[(int) length];

        int offset = 0;
        int numRead = 0;
        while (offset < bytes.length
                && (numRead = is.read(bytes, offset, bytes.length - offset))
                >= 0) {
            offset += numRead;
        }

        if (offset < bytes.length) {
            throw new IOException("Não pode completar a leitura do arquivo "
                    + file.getName());
        }
        is.close();
        return bytes;
    }

    public static String encode64ToDB(byte[] array) {
        BASE64Encoder encoder = new BASE64Encoder();
        String retorno = encoder.encodeBuffer(array);
        return retorno;
    }

    public String jPasswordEncriptado() {
        JPasswordField password = new JPasswordField(10);
        password.setEchoChar('*');
        JLabel rotulo = new JLabel("Entre com a senha:");
        JPanel entUsuario = new JPanel();
        entUsuario.add(rotulo);
        entUsuario.add(password);
        JOptionPane.showMessageDialog(null, entUsuario, "Acesso restrito", JOptionPane.PLAIN_MESSAGE);
        return new String(password.getPassword());
    }
    
    class LauncherThread extends Thread {

        public void run() {

            while (true) {
                try {
                    //5 minuto espira a senha
                    Thread.sleep(300000);
                    senha = null;
                } catch (InterruptedException ex) {
                    Logger.getLogger(Launcher.class.getName()).log(Level.SEVERE, null, ex);
                }
                   
            }
        }
    }
}

Galera.. ajuda ae por favor!

3 Respostas

Hade

Galera, ninguém consegue ajudar?

E

Tente usar um Java Web Start em vez de applets. Cada vez menos elas têm permissões, mesmo quando assinadas. Isso é por causa da paranóia de segurança dos browsers. Sinto muito.

Hade

Poderia me explicar como funciona Java Web Start?

como deveria criar o projeto para usar isso? seria só mudar a configuracao em propriedade?

outra coisa que eu gostaria de saber…
la em propriedades na aba execução… eu tenho que compilar a applet usando algum parametro…

o tal arquivo applet.police deve ser carregado junto? … pq eu nao tenho um arquivo applet.police mas em outro projeto que criei ele apareceu sozinho… sei lá…

se puder me ajudar… fico grato

Criado 15 de setembro de 2011
Ultima resposta 19 de set. de 2011
Respostas 3
Participantes 2