【问题标题】:"Access Denied" when trying to access file in web app尝试访问 Web 应用程序中的文件时出现“拒绝访问”
【发布时间】:2014-02-26 18:43:40
【问题描述】:

我有一个 xslt 文件存储在文件夹 Project/tools 中。 (我使用的是 Netbeans IDE。)

我尝试在我的代码中访问此文件,但在运行时,我得到一个AccessControlException: access denied

代码是:

java.net.URI xsltURI = new java.net.URI(myUtil.getUri("xsltFile.xslt"));
Transformer transformer = factory.newTransformer(new StreamSource(new File(xsltURI)));

myUtil 实例必须用于访问 URI,原因在这里并不重要。我打印了它的输出,它正确地给出了文件的相对路径。

我尝试使用file:///file:///[fulldomain] 作为相对路径的前缀,但在每种情况下,它实际上都尝试访问服务器上的硬盘驱动器,即使我没有在任何地方提供驱动器名称。 (!) 它会尝试访问 C:[relative-path],而这甚至都不是文件所在的位置。

如果我省略file:///,那么我会得到the URI is not absolute,如果我只是给出文件的完整网址,我会得到NullPointerException

任何帮助都将不胜感激。

更新:在我下面的评论之后,我的代码类似于

java.net.URI xsltURI = new java.net.URI("https://host" + myB2U.getUri("xsltFile.xslt"));
        
java.net.URL xsltURL = xsltURI.toURL();
        
java.net.URLConnection myConnection = xsltURL.openConnection();
        
myConnection.connect(); //AccessControlException: access denied ("java.net.SocketPermission"...
        
java.io.InputStream xsltStream = myConnection.getInputStream();
       
Transformer transformer = factory.newTransformer(new StreamSource(xsltStream));

有什么明显的错误吗?

【问题讨论】:

  • 好的。根据我收集到的信息,我应该用文件的路径实例化一个 URL 对象。从那里,我应该能够从URL 初始化URLConnection。调用URLconnect()方法后,应该可以通过调用getInputStream()方法得到InputStream。然而,当我调用connect() 方法时,我得到了一个AccessControlException: access denied ("java.net.SocketPermission ")
  • 您是否在应用程序中使用了安全管理器?如果是,您可能需要在安全策略文件中为您的代码授予 SocketPermission
  • 是的。需要添加权限。

标签: java file jsp uri


【解决方案1】:

file:// 协议告诉 Java 使用文件访问来打开流。如果您不想访问文件,则应使用不同的协议,例如 http://。

如果您使用的是相对路径,则 URI 应该类似于 file://./My/Relative/Path。第三个斜线表示它是相对于根的。

【讨论】:

    【解决方案2】:

    根据我收集到的信息,我应该用文件的路径实例化一个 URL 对象。从那里,我应该能够从URL 初始化URLConnection。在我调用URLconnect()方法后,我应该可以通过调用getInputStream()方法获得InputStream

    【讨论】:

      猜你喜欢
      • 2011-10-03
      • 1970-01-01
      • 2015-03-06
      • 2013-05-05
      • 2021-07-10
      • 2013-05-26
      • 2020-03-21
      • 2020-01-24
      • 1970-01-01
      相关资源
      最近更新 更多