use*_*066 9 java google-app-engine
我的App Engine应用程序中有一个静态XML文件,上传得很好,我正在尝试为一些基于规则的执行逻辑读取它,但是下面的错误引发了我的注意:
Caused by: java.security.AccessControlException: access denied (java.io.FilePermission /war/WEB-INF/StaticContent.xml read)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:393)
at java.security.AccessController.checkPermission(AccessController.java:553)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:166)
at java.lang.SecurityManager.checkRead(SecurityManager.java:888)
at java.io.FileInputStream.<init>(FileInputStream.java:130)
at java.io.FileInputStream.<init>(FileInputStream.java:96)
Run Code Online (Sandbox Code Playgroud)
我尝试将文件直接放在战争和war/WEB-INF
目录中,问题仍然存在.服务器上的尝试读取文件就像这样简单:
final FileInputStream fis = new FileInputStream("/war/WEB-INF/StaticContent.xml");
Run Code Online (Sandbox Code Playgroud)
根据这篇文章,我正在做的一切正确:http: //code.google.com/appengine/kb/java.html#readfile
任何帮助都感激不尽.
Kal*_*Kal 11
使用getResourceAsStream而不是直接打开FileInputStream.
您在FileInputStream中指定的位置被视为绝对位置,这就是您获得hte访问被拒绝异常的原因.
ServletContext context = getServletContext();
InputStream is = context.getResourceAsStream("/WEB-INF/StaticContent.xml");
Run Code Online (Sandbox Code Playgroud)
您是否尝试过war/WEB-INF/StaticContent.xml
从而不是读取/war/WEB-INF/StaticContent.xml
?后者可能被解释为绝对路径,而实际上您不知道绝对路径是什么,因此需要相对路径。