Pessoal, desenvolvi uma aplicação em que realiza uma conexão a um banco de dados via mysql atravéns de um applet. No eclipse, ele rodou sem problemas, mas quando vou executá-lo no browser, dá o seguinte erro:
[code]** BEGIN NESTED EXCEPTION **
java.security.AccessControlException
MESSAGE: access denied (java.net.SocketPermission mysql.inf.ufsc.br resolve)
STACKTRACE:
java.security.AccessControlException: access denied (java.net.SocketPermission mysql.inf.ufsc.br resolve)
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.checkConnect(Unknown Source)
at java.net.InetAddress.getAllByName0(Unknown Source)
at java.net.InetAddress.getAllByName0(Unknown Source)
at java.net.InetAddress.getAllByName(Unknown Source)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:133)
at com.mysql.jdbc.MysqlIO.(MysqlIO.java:280)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:1765)
at com.mysql.jdbc.Connection.(Connection.java:430)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:268)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at ecfv.sql.SQL.(SQL.java:22)
at ecfv.consulta.sql.ConsultaSQL.(ConsultaSQL.java:15)
at ecfv.consulta.Consulta.realizaConsulta(Consulta.java:107)
at ecfv.consulta.Consulta$1.run(Consulta.java:86)
at java.lang.Thread.run(Unknown Source)
** END NESTED EXCEPTION **
at com.mysql.jdbc.Connection.createNewIO(Connection.java:1830)
at com.mysql.jdbc.Connection.<init>(Connection.java:430)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:268)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at ecfv.sql.SQL.<init>(SQL.java:22)
at ecfv.consulta.sql.ConsultaSQL.<init>(ConsultaSQL.java:15)
at ecfv.consulta.Consulta.realizaConsulta(Consulta.java:107)
at ecfv.consulta.Consulta$1.run(Consulta.java:86)
at java.lang.Thread.run(Unknown Source)
[/code]
Detalhe que é um applet assinado e o driver jdbc do mysql está carregado no classpath. Uso a seguinte versão: mysql-connector-java-3.1.7-bin.jar
Desde já, obrigado!
Não basta só assinar o applet; eu ainda não sei exatamente quando (o porquê eu até sei, mas não o quando) é necessário fazer algo como:
public class NoSecurityManager extends SecurityManager {
public void checkPermission(Permission perm, Object context) {
}
public void checkPermission(Permission perm) {
}
}
… e na hora de chamar o seu código:
if (System.getSecurityManager() == null) {
System.setSecurityManager(new NoSecurityManager());
}
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
// chame o seu código privilegiado aqui
...
return new Object();
}
});
Isto é para Sun Plug-In. Para Microsoft JVM é necessário fazer algo como:
PolicyEngine.assertPermission(PermissionID.SYSTEM);
A Microsoft JVM tem uma coisa muito esquisita - essa permissão só vale dentro do escopo da função em que é chamada. Quando a função retorna, a permissão não vale mais.
E, como de costume vou dar aquele puxão de orelha amigo:
- Não acesse bases de dados em um applet. Deixe isso para o servidor (web container, como o Tomcat ou o Jetty, ou application container, como o JBoss, J2EE Reference Implementation, Websphere, Weblogic, Sun Java App. Server etc.)
Bom, valeu pelas dicas ai thingol, por mim eu até faria em tipo jsp e tal, o problema eh q eu nao sei nada de j2ee… e como eu nao tenho mto tempo para estudar, resolvi fazer em applet msm…
Putz, fiz exatamente o q voce disse e nao consegui nada, estou usando o driver jdbc do mysql 3.1.7 e java 5
public void actionPerformed( ActionEvent e ) {
if ( !campoTexto.getText().matches( "[a-z0-9]{15}" ) )
JOptionPane.showMessageDialog( this, "Dados digitados inválidos.\nCertifique-se que você tenha digitado corretamente.", "Dados inválidos.", JOptionPane.ERROR_MESSAGE );
else {
if ( System.getSecurityManager() == null )
System.setSecurityManager( new ConsultaSecurityManager() );
AccessController.doPrivileged( this );
}
}
No Java 5, uma coisa que ajuda para você testar é limpar o cache de applets sempre que possível, ou então desabilitar o cache. Pode ser que você esteja usando uma versão velha do applet 
Pegue no Control Panel (estou supondo que você esteja usando Windows; no Linux não sei onde fica o Control Panel do Java, mas não deve ser impossível de encontrar) o ícone Java (não é o Java Plugin 1.4: é o ícone Java sozinho), em Temporary Internet Files, clique Settings, clique View Applets, limpe os applets que estão no cache (marque e clique Delete), e desmarque o [X] Enable Caching).
A seguir, feche todas as janelas do browser, feche o tray icon do Java se ele estiver presente, e entre novamente.