【问题标题】:Java - glassfish - web service - local file accessJava - glassfish - Web 服务 - 本地文件访问
【发布时间】:2012-04-27 12:25:57
【问题描述】:

我在 Ubuntu 上使用 glassfish 服务器运行网络服务。问题是 - 它需要访问其共享资源之外的目录。目前它给出了一个错误,说“权限被拒绝”。我也在 server.policy 中设置了权限。

grant codeBase "/home/glassfish/glassfish/test/-" {
    permission java.security.AllPermission;
};

但它似乎不起作用。 我试过 <property name="alternatedocroot_1" value="from=*.* dir=/home/glassfish/glassfish/test"/> ,但似乎只授予阅读权限。我也需要写权限。所以我的问题是如何设置写权限?

谢谢。

【问题讨论】:

  • 你检查过 glassfish 用户对目录有写权限吗?
  • 是 glassfish 用户拥有读/写/执行所有权限。
  • 您如何访问这些文件? Java File API 还是作为资源加载?
  • 以 glassfish 用户登录时,可以在给定目录中运行“touch foo”吗?您是否测试过权限设置是否正确?还可以尝试在关闭 JVM 安全性的情况下进行测试,看看这是否是问题的一部分。
  • java.lang.SecurityExceptionjava.io.FileNotFoundException,还是java.io.IOException? “权限被拒绝”太模糊了。

标签: java web-services glassfish-3 file-permissions ubuntu-11.04


【解决方案1】:

这不是 JavaSecurity 问题,因此您无需在这方面进行任何调整。

FWIW 我们在各种风格的 Windows 上部署到 GF 的网络应用程序使用文件 API 写入“应用程序”目录之外的目录。 Alternatedocroot 与 GF 使用 DefaultServlet 提供静态内容有关,而不是在应用程序部署目录之外写入。

在 Windows 上,当您作为服务运行时,您必须注意“运行方式”用户具有写入目标目录的适当权限,在 Unix 上,您需要确保用户由您的 rc (init.d) 设置运行 asadmin.sh 的脚本具有读取/写入目标目录的权限。

我会仔细检查运行 GF 的 java 进程的用户是否对您尝试写入的目录具有 rwx 权限。确保用户可以写入目标文件夹。要对此进行测试,您可以 su 到用户并使用“touch”命令,如下所示:touch /tmp/test 并以这种方式验证写入权限。通过运行“ls -l /tmp/test”类似地验证读取权限,以确保您可以读取它。

看看什么'ps -ef | grep java' 显示验证运行 GF java 进程的用户。此外,在您的代码中尝试指定测试文件的完整路径,例如。文件测试 = new File("/tmp/test");

您是从 rc 脚本运行 GF,还是从 shell 提示符使用 asadmin.sh 启动它?如果您正在运行 rc 脚本,请检查您的 rc 脚本是否真的以您期望的用户身份运行它。

【讨论】:

    猜你喜欢
    • 2011-05-23
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多