我正在尝试执行以下操作(在Jetty 8中运行):
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 :(得分:2)
jetty正在运行一个安全管理器,它限制了servlet可以执行的操作(以避免恶意代码能够对servlet容器执行令人讨厌的事情)。解决此问题的最简单方法是关闭安全管理器,在jetty启动脚本中搜索此cmdline选项:
-Djava.security.manager
但要注意:这会关闭所有安全检查,更好的解决方法是增强策略文件,查找此选项:
-Djava.security.policy=
将引导您使用已使用的策略文件并对其进行编辑以满足您的需求,这是文档:
http://download.oracle.com/javase/1.4.2/docs/guide/security/PolicyFiles.html