AccessControlException при подключении к серверу HTTP из сервлета Tomcat - PullRequest
1 голос
/ 08 октября 2009

Я пытаюсь заставить мой сервлет tomcat загружать несколько файлов, но у меня на одном сервере запущены apache и tomcat, поэтому я предполагаю, что именно поэтому он не работает. Я тестировал на серверах, не работающих Apache, и все хорошо.

Вот исключение, которое я получаю, когда пытаюсь использовать новый 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)

Как я могу запустить загрузку http через tomcat при одновременном запуске apache? Я застрял?

EDIT:
Что бы я ни делал, я не могу пройти мимо кота. Вот 03catalina.policy:

// ========== РАЗРЕШЕНИЯ КОДА 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";
};

1 Ответ

2 голосов
/ 08 октября 2009

Ваша проблема не имеет ничего общего с наличием или отсутствием какой-либо программы, работающей на том же компьютере; это связано с наличием SecurityManager в Tomcat (что, вероятно, означает, что вы используете старую версию Tomcat).

Вот подробная документация по , как настроить Tomcat SecurityManager . В вашем случае вы добавите несколько строк в файл local.policy, как

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