2011-10-25 28 views
0

我試着做以下(在碼頭8上運行):getClassLoader()從ServletContext中導致的AccessControlException

public class FooListener implements ServletContextListener { 
    public void contextInitialized(ServletContextEvent event) { 
    event.getServletContext().getClassLoader(); 
    } 
} 

這就是我得到:

java.security.AccessControlException: access denied (java.lang.RuntimePermission getClassLoader) 
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374) 
at java.security.AccessController.checkPermission(AccessController.java:546) 
at org.eclipse.jetty.server.handler.ContextHandler$Context.getClassLoader(ContextHandler.java:2179) 
at com.example.FooListener.contextInitialized(FooListener.java:69) 
at org.eclipse.jetty.server.handler.ContextHandler.callContextInitialized(ContextHandler.java:672) 
at org.eclipse.jetty.servlet.ServletContextHandler.callContextInitialized(ServletContextHandler.java:403) 
at org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:664) 

是什麼它關於和如何解決?

+0

這個限制在API文檔中提到(類似於'Class.getClassLoader'):http://download.oracle.com/javaee/6/api/javax/servlet/ServletContext.html#getClassLoader() –

回答

2

jetty正在運行一個安全管理器,該管理器限制了servlet可以執行的操作(以避免惡意代碼能夠對servlet容器做不好的事情)。該easist事情來解決這個問題是關掉了安全管理器,搜索在您的碼頭啓動腳本此CMDLINE選項:

-Djava.security.manager 

但要注意:這將關閉所有的安全檢查,確定這是一個更好的辦法以增強政策的文件中,查找此選項:

-Djava.security.policy= 

這將導致你所使用的政策文件,並進行修改,以滿足您的需求,這裏是文檔:

http://download.oracle.com/javase/1.4.2/docs/guide/security/PolicyFiles.html

相關問題