Pergunta

Reuni um applet básico em que o usuário seleciona um arquivo do disco rígido, ele lê a primeira linha desse arquivo e passa isso para o JavaScript para obter um pré -processamento adicional e, quando você clica em um botão, ele tenta fazer o upload que isso Arquive através de uma solicitação de postagem HTTP. Encontrei um applet de código aberto muito básico para fazer upload de arquivos que copiei e modifiquei para este último bit.

O problema é que, porém, não funciona bem. Parece que está funcionando bem, mas então eu encontro dois obstáculos relacionados a permissões. As mensagens no console Java dizem que o applet teve acesso negado erros nas duas permissões a seguir:

java.lang.RuntimePermission setFactory
java.io.FilePermission read

Acho isso estranho, porque pensei que já havia concedido permissão ao applet quando o construí com a opção "auto-autenticada" verificada no NetBeans e depois cliquei para confirmar o pequeno pop-up de segurança no navegador.

Além disso, a parte que eu me codifiquei, onde lê o arquivo e passa a primeira linha para o JavaScript funciona bem. Este é um indicador bastante claro de que o applet pode ler no sistema de arquivos local! O problema não começa até eu realmente tentar iniciar o upload. Uma coisa a observar, suponho, é que o processo de upload parece ser executado em um novo thread, enquanto o restante de tudo é executado na classe principal sem criar threads.

Sou um novato no Java e sei muito pouco sobre tópicos em Java; Preciso passar as permissões para este novo tópico de alguma forma? Ou algo para esse efeito? Desde já, obrigado.

Foi útil?

Solução

Você provavelmente precisa solicitar ao gerente de segurança (código, não administrador) para fazer uma operação privilegiada. Por várias razões, geralmente não é uma coisa boa para um applet abrir um arquivo local, por isso é protegido bastante.

A chave básica é ligar AccessController.doPrivileged() E há um Bom pequeno tutorial nele no Java Ranch FAQ.

Outras dicas

Eu tive um problema semelhante que levou uma eternidade para resolver. Acontece que os métodos de applet chamados do JavaScript não têm permissões, mesmo que você os conceda explicitamente em um arquivo de política.

Esta solução alternativa funcionou para mim (adicionando comandos a uma fila pela qual o applet faz um loop):http://blog.carrythezero.com/?p=5

Certifique -se de entender os perigos aqui: qualquer um pode modificar o JavaScript em uma página e alterar o que está sendo alimentado no applet. No meu caso, sei que o código nunca está em um servidor da web e a classe não é assinada, para que falhe, a menos que no local específico concedido pelo meu arquivo de política.

Provavelmente porque o JavaScript não está assinado. Sugiro fortemente não assinar o código, principalmente se você não souber o que está fazendo. A partir de 6U10 (ainda não no Mac), os applets podem usar o JNLP, incluindo o FilePenservice, para que você não precise assinar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top