2009-10-08 7 views
1

J'essaie de faire en sorte que ma servlet Tomcat télécharge un certain nombre de fichiers, mais j'ai Apache et Tomcat en cours d'exécution sur le même serveur, donc je suppose que cela ne fonctionne pas . J'ai testé sur des serveurs ne fonctionnant pas apache, et tout va bien.AccessControlException lors de la connexion au serveur HTTP à partir de la servlet Tomcat

Voici l'exception que je reçois lorsque je tente d'utiliser une nouvelle URL (fileURL) .openStream():

Opening input stream Attempted to download: http://www.stefankendall.com/files/test.txt java.security.AccessControlException: access denied (java.net.SocketPermission www.stefankendall.com:80 connect,resolve) 

Comment puis-je utiliser http téléchargements via tomcat lors de l'exécution apache en même temps? Suis-je coincé?

EDIT:
Peu importe ce que je fais, je ne peux pas tomcat passé. Voici 03catalina.policy:

// ========== AUTORISATIONS CODE catalina ========================== =============

// These permissions apply to the logging API 
grant codeBase "file:${catalina.home}/bin/tomcat-juli.jar" { 
     permission java.util.PropertyPermission "java.util.logging.config.class", "read"; 
     permission java.util.PropertyPermission "java.util.logging.config.file", "read"; 
     permission java.lang.RuntimePermission "shutdownHooks"; 
     permission java.io.FilePermission "${catalina.base}${file.separator}conf${file.separator}logging.properties", "read"; 
     permission java.util.PropertyPermission "catalina.base", "read"; 
     permission java.util.logging.LoggingPermission "control"; 
     permission java.io.FilePermission "${catalina.base}${file.separator}logs", "read, write"; 
     permission java.io.FilePermission "${catalina.base}${file.separator}logs${file.separator}*", "read, write"; 
     permission java.lang.RuntimePermission "getClassLoader"; 
     // To enable per context logging configuration, permit read access to the appropriate file. 
     // Be sure that the logging configuration is secure before enabling such access 
     // eg for the examples web application: 
     // permission java.io.FilePermission "${catalina.base}${file.separator}webapps${file.separator}examples${file.separator}WEB-INF${file.separator}classes${file.separator}logging.properties", "read"; 
}; 

// These permissions apply to the server startup code 
grant codeBase "file:${catalina.home}/bin/bootstrap.jar" { 
     permission java.security.AllPermission; 
permission java.net.socketPermission "*:80", "connect, resolve"; 
}; 

// These permissions apply to the servlet API classes 
// and those that are shared across all class loaders 
// located in the "lib" directory 
grant codeBase "file:${catalina.home}/lib/-" { 
     permission java.security.AllPermission; 
     permission java.net.socketPermission "*:80", "connect, resolve"; 
}; 

grant codeBase "file:${catalina.home}/webapps/-" { 
permission java.security.AllPermission; 
permission java.net.socketPermission "*:80", "connect, resolve"; 
}; 

Répondre

2

Votre problème n'a rien à voir avec la présence ou l'absence de certains programmes en cours d'exécution sur la même case; Cela a à voir avec la présence d'un SecurityManager dans Tomcat (ce qui, probablement, signifie que vous utilisez une ancienne version de Tomcat).

Voici une documentation détaillée sur how to configure the Tomcat SecurityManager. Dans votre cas, vous allez ajouter quelques lignes au fichier local.policy, le long des lignes de

grant codeBase "file:${catalina.home}/webapps/-" { 
    permission java.net.SocketPermission "*:80", "connect"; 
}; 
+0

Il est clair que je ne comprenais pas le problème, car je croyais ma seule différence de configuration pour être l'existence d'apache. Je vais essayer ceci et voir si cela fonctionne. Les dangers de l'utilisation de logiciels préconfigurés .... –

+0

N'a pas fonctionné. Voir le commentaire –

+0

Les modifications doivent être dans 50local.policy. –

Questions connexes