Controle de Acesso no Java Web Start

Olá pessoal,

Estou tentando executar uma aplicação standalone via JWS, mas quando tento abrir um fileChooser ocorre a seguinte exception:

Exception in thread "AWT-EventQueue-1" java.security.AccessControlException: access denied (java.util.PropertyPermission user.dir read)
	at java.security.AccessControlContext.checkPermission(Unknown Source)
	at java.security.AccessController.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)
	at java.lang.System.getProperty(Unknown Source)
	at java.io.Win32FileSystem.getUserPath(Unknown Source)
	at java.io.Win32FileSystem.resolve(Unknown Source)
	at java.io.File.getAbsolutePath(Unknown Source)
	at sun.awt.shell.Win32ShellFolder2.<init>(Unknown Source)
	at sun.awt.shell.Win32ShellFolder2.listFiles(Unknown Source)
	at sun.awt.shell.ShellFolder.listFiles(Unknown Source)
	at sun.awt.shell.Win32ShellFolderManager2.get(Unknown Source)
	at sun.awt.shell.ShellFolder.get(Unknown Source)
	at javax.swing.plaf.metal.MetalFileChooserUI.updateUseShellFolder(Unknown Source)
	at javax.swing.plaf.metal.MetalFileChooserUI.installComponents(Unknown Source)
	at javax.swing.plaf.basic.BasicFileChooserUI.installUI(Unknown Source)
	at javax.swing.plaf.metal.MetalFileChooserUI.installUI(Unknown Source)
	at javax.swing.JComponent.setUI(Unknown Source)
	at javax.swing.JFileChooser.updateUI(Unknown Source)
	at javax.swing.JFileChooser.setup(Unknown Source)
	at javax.swing.JFileChooser.<init>(Unknown Source)
	at javax.swing.JFileChooser.<init>(Unknown Source)
	at br.com.hello.form.JCustomFileChooser.<init>(JCustomFileChooser.java:28)

Tem como modificar esse controle de acesso?

Agradeço se puderem ajudar.

Pra esse caso específico, você pode usar o FileOpenService. Agora, se precisar de outras permissões diferentes ou não cobertas por serviços, vai precisar do all-permissions.

Ola

voce conseguiu resolver seu problema …

estou com o mesmo problema …

como voce resolveu …

Você leu minha resposta logo acima da sua pergunta, Marcos?

sim, mas nao deu certo

Poste o código que você fez e a exceção para que possamos ajudar.

meu codigo :

import java.io.*;
import javax.swing.JOptionPane;

public class _escreverAA {

	private static RandomAccessFile arquivo;

	public _escreverAA() {

		try {
			arquivo = new RandomAccessFile(new File("arquivo.txt"), "rw");
			JOptionPane.showMessageDialog(null, "acho arquivo", "", JOptionPane.ERROR_MESSAGE);
		} catch (FileNotFoundException e) {
			JOptionPane.showMessageDialog(null, e.getMessage(), "erro 1 nao acho", JOptionPane.ERROR_MESSAGE);
		}

		try {
			arquivo.writeInt(1);
			arquivo.writeDouble(1984);
			arquivo.writeChar('T');
			arquivo.writeUTF("teste");
			JOptionPane.showMessageDialog(null, "gravo arquivo", "", JOptionPane.ERROR_MESSAGE);
		} catch (IOException e) {
			JOptionPane.showMessageDialog(null, e.getMessage(), "erro 2 gravo", JOptionPane.ERROR_MESSAGE);
		}
	}
}

o erro :

Exception in thread "AWT-EventQueue-0" java.security.AccessControlException: access denied (java.io.FilePermission arquivo.txt read)
	at java.security.AccessControlContext.checkPermission(Unknown Source)
	at java.security.AccessController.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkRead(Unknown Source)
	at java.io.RandomAccessFile.<init>(Unknown Source)
	at _escreverAA.<init>(_escreverAA.java:12)
	at Acesso$1.actionPerformed(Acesso.java:23)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Obrigatoriamente sua classe deve estar num package. Se nem assim funcionar, mande também o JNLP.

segue meu jnlp …


<?xml version="1.0" encoding="utf-8"?> 

<jnlp 
	spec="1.0+" 
	codebase="http://www.informaticajm.com.br/tutorialjws" href="teste.jnlp"> 

		<information> 
			<title>teste</title> 
			<vendor>teste</vendor> 
			<homepage href="http://www.informaticajm.com.br/tutorialjws/index.html"/>

			<description>teste</description> 
			<description kind="short">teste</description> 
			<icon href="images/logo.jpg"/> 
			<offline-allowed/> 
		</information> 

		<resources> 
			<j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/> 

			<jar href="teste1.jar"/> 
			<property name="myProperty" value="teste"/> 

		</resources> 

		<application-desc main-class="Acesso"/> 
   		</application-desc>

		<security>
			<all-permissions/>
		</security>
</jnlp>

eu tambem tenho uma outra aplicacao com package que da o mesmo erro, coloquei essa por ser mais simples …

Você assinou os jars?

sim, assine meu jar conforme este manual :


http://www.javafree.org/javabb/viewtopic.jbb?t=1470

da mesma maneira, inclusive com as mesmas senhas …
mas nao funcionou …

teoricamente, quando eu mandasse executar via web, ele deveria pedir que eu aceitasse ou nao o certificado, certo ??
mas nem isso ele faz quando eu executo, nunca pediu, tenho que configurar alguma coisa pra que esse certificado “ative” ??
pode ser isso ??

[quote=marcoscorso]teoricamente, quando eu mandasse executar via web, ele deveria pedir que eu aceitasse ou nao o certificado, certo ??
[/quote]

Certo. Provavelmente seu jar não está “de verdade” assinado.

Faça o seguinte: localize o jar no cache no Java WebStart da sua máquina , faça um jar tvf META-INF/ e poste o resultado.

ai vai …


http://www.informaticajm.com.br/tutorialjws/images/comando.jpg

entao minha assinatura esta errada, pois quando executo nao pede o certificado …

o que posso fazer em relacao a assinatura ??

Bem, você não fez exatamente o que eu te pedi. Você listou o jar assinado da sua máquina, mas eu quero saber se o jar do cache do WebStart está assinado. Localize esse jar e rode o comando nele.

o unico teste.jar que encontrei na minha maquina foi esse onde esta o site, no cache da minha maquina :

(painel de controle -> java -> general -> settings )

aqui esta assim

C:\Documents and Settings\Administrador\Dados de aplicativos\Sun\Java\Deployment\cache

entrei nessa pasta, tem varias outras pastas, mas em nenhuma desla esta o teste .jar …

desculpe, mas como faco isso ???

Ele renomeia o jar de acordo com alguns padrões. Procure por teste.jar. Outra coisa: ao rodar o comando, faça jar tvf <nome_do_jar>; melhor ter toda a listagem pra conferir.

nao existe nenhum arquivo na minha maquina, conforme figura abaixo …


http://www.informaticajm.com.br/tutorialjws/images/arquivo.jpg

se voce quiser acessar esse meu teste.jar, favor acesse :


http://www.informaticajm.com.br/tutorialjws/

clicar no link “teste arquivo txt”

Só dá timeout.

aqui to acessando normalmente o site …

tenta


http://www.informaticajm.com.br

clicar no link “tutorialjws” e depois “teste arquivo txt - ultimo link”