我的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)
我尝试将文件直接放在战争和war/WEB-INF
目录中,问题仍然存在。服务器上的尝试读取文件就像这样简单:
final FileInputStream fis = new FileInputStream("/war/WEB-INF/StaticContent.xml");
根据这篇文章,我正在做的一切正确: http://code.google.com/appengine/kb/java.html#readfile
非常感谢任何帮助。
答案 0 :(得分:11)
使用getResourceAsStream而不是直接打开FileInputStream。
您在FileInputStream中指定的位置将被视为绝对位置,这就是您获得拒绝访问被拒绝的原因。
ServletContext context = getServletContext();
InputStream is = context.getResourceAsStream("/WEB-INF/StaticContent.xml");
答案 1 :(得分:1)
您是否尝试过war/WEB-INF/StaticContent.xml
而不是/war/WEB-INF/StaticContent.xml
?可能是后者被解释为绝对路径,而实际上你不知道绝对路径是什么,因此需要相对路径。
答案 2 :(得分:0)
如果您的文件存储在war目录中,那么您可以在不指定文件路径中的项目名称的情况下访问它:
项目为 战争- sample.json
然后使用路径访问文件as- FileReader fr = new FileReader(“war / sample.json”);
:)
答案 3 :(得分:-1)
我发现以下内容对我有用:
InputStream feedStream = new FileInputStream("WEB-INF/" + fileName);