Java.security.AccessControlException: access denied em WebStart

Olá pessoal. Tenho uma aplicação que utiliza os frameworks SwingBean e Hibernate que funcionam perfeitamente no computador. Porém, quando o “instalo” na pasta do tomcat pra que os computadores da rede possam acessá-lo recebo a seguinte exception após o usuário fazer o login (ou melhor, quando o Hibernate procura no banco de dados por um login existente):

[code]
Exception in thread “AWT-EventQueue-0” java.lang.ExceptionInInitializerError
at org.hibernate.connection.C3P0ConnectionProvider.configure(C3P0ConnectionProvider.java:84)
at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:80)
at org.hibernate.cfg.SettingsFactory.createConnectionProvider(SettingsFactory.java:362)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:60)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:1463)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1004)
at dao.HibernateUtility.<clinit>(HibernateUtility.java:12)
at dao.UsuariosDAO.autentica(UsuariosDAO.java:62)
at gui.Login$Logar.actionPerformed(Login.java:134)
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.pumpOneEventForHierarchy(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)

Caused by: java.security.AccessControlException: access denied (java.util.PropertyPermission * read,write)
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.checkPropertiesAccess(Unknown Source)
at java.lang.System.getProperties(Unknown Source)
at com.mchange.v2.c3p0.PoolConfig.<clinit>(PoolConfig.java:89)[/code]
Nesse caso eu preciso assinar o jar??? Não faço idéia do problema pois não sei se o erro é causado quando ele tenta acessar algum dos XML salvos no diretório, por exemplo. No que puderem me ajudar ficaria mt grato…

Abraços…

[quote=adrianostanley]Nesse caso eu preciso assinar o jar???
Sim.[/quote]

Neste caso é melhor mandar os seus arquivos XML em um jar (ou no mesmo da sua aplicação) e assinar. Tem que assinar também todoso os jar que você referencia (que são mandados juntos via JNLP).

Há como assinar o jar no próprio eclipse?? Pois quando tento executar o comando jar -cvf no prompt de comando ele diz que jar não é reconhecido como um comando interno… etc… abraços…

Putz grilla… tb to com esse mesmo problema

Eu usei o maven para assinar o código automaticamente. Tem um goal chamado jnlp que assina os jars automaticamente.

Com relação ao comando jar: o que você precisa usar é o jarsigner e não o jar. O executável do jarsigner fica no mesmo diretório do javac ($JAVA_HOME/bin).

Consegui utilizar o jarsigner… mas ele parece não ter permissão pra assinar os jars que utilizo como hibernate3.jar, por exemplo. Só assina os que foram gerados… e mesmo assinando o jar principal continua dando o mesmo erro.

Os XML de configuração do hibernate estão soltos na pasta principal do .jar, poderia ser isso?? Pensei em colocá-los dentro de uma pasta… mas nos tutoriais a respeito do hibernate eles falam pra colocar na pasta raiz do programa…

Como assim “não tem permissão”? Só se for permissão de escrita no arquivo, pois se já estiver assinado, acho que não dá erro nenhum. precisa assinar todos os arquivos definidos no arquivo .jnlp.

Sim. Sem problemas.

Eu consegui assinar os jars no computador ao lado aqui que já tinha uns scripts prontos pra assinar… assinei todos eles e voltei com os .jars pra essa máquina… isso não interfere não né??? Pq mesmo assinando todos os jars continuou dando o mesmo erro de antes…

Várias coisas a serem verificadas:
:arrow: O stacktrace é exatamente o mesmo? Não está dando algo como IOException?
:arrow: Limpe o cache do Web Start (não o cache do browser).
:arrow: Verifique se todos os arquivo estão realemente assinados (use o jarsigner -verify).
:arrow: Tem um bug relatado em uma thread aqui do forum sobre jars já assinados. Teria que limpar a asinatura e assinar de novo.

Como eu faço pra ferramente jarsigner poder ser acessada de qualquer pasta do windows??? Só consigo utiliza-lá estando na pasta bin através do prompt de comando… quando eu vou para a pasta dos jars, e digito jarsigner … … … ele diz que jarsigner não é um comando interno…

oyama, verifiquei todos seus passos e todos as exceções continuam idênticas…

access denied…

ola

estou com o mesmo problema, voce conseguiu resolver …

tenho o seguinte codigo para exportar um relatorio para pdf :

try {
JasperFillManager.fillReportToFile( “C:/jmweb/tutorialjws/relatorios/Atualiza.jasper” , map, jrRS );
} catch (JRException e1) {
e1.printStackTrace();
JOptionPane.showMessageDialog(null , e1.getMessage() , “erro 1” , JOptionPane.ERROR_MESSAGE);
return null ;
}
try {
JasperExportManager.exportReportToPdfFile( “C:/jmweb/tutorialjws/relatorios/Atualiza.jrprint” );
} catch (JRException e2) {
e2.printStackTrace();
JOptionPane.showMessageDialog(null , e2.getMessage() , “erro 2” , JOptionPane.ERROR_MESSAGE);
return null ;
}

JOptionPane.showMessageDialog( null , “Relatório Criado com Sucesso !” , “Operador” , JOptionPane.INFORMATION_MESSAGE ) ;

try {
@SuppressWarnings(“unused”)
Process p = Runtime.getRuntime().exec(“cmd.exe /C C:/jmweb/tutorialjws/relatorios/Atualiza.pdf”);
} catch (IOException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null , e.getMessage() , “erro ao abrir relatorio” , JOptionPane.ERROR_MESSAGE);
return null ;
}

ja assinei meu .jar, quando executo localmente funciona, quando executo na web da o seguinte erro :

Exception in thread “AWT-EventQueue-0” java.security.AccessControlException: access denied (java.io.FilePermission C:\jmweb\tutorialjws\relatorios\Atualiza.jasper read)

o que pode ser ??

meu java.policy e javaws.policy estao assim :
grant signedBy “key”, codeBase “http://www.informaticajm.com.br/*” {
permission java.security.AllPermission;
permission java.io.FilePermission “<>”, “read, write, execute, delete”;
};

grant codeBase “file:/C:/jmweb/*” {
permission java.security.AllPermission;
permission java.io.FilePermission “<>”, “read, write, execute, delete”;
};

obrigado