【问题标题】:Tomcat windows service unable to access network driveTomcat windows服务无法访问网络驱动器
【发布时间】:2012-10-01 19:48:46
【问题描述】:

我有两个 Windows 域 A 和 B。

我有两台服务器:nasB 在域 B 上,webserverA 在域 A 上。

我有两个用户:域 B 上的 userB 和访问 nasB 和域 A 上的 userA 访问 webserverA

我在webserverA 上将tomcat 作为服务运行,它的logon as 属性设置为userA

我使用userB 凭据将\\nasB\myFiles$\ 映射到webserverA。该映射仅允许 JVM 访问。我总是在代码中使用 UNC 访问驱动器。我在管理网络密码中也有凭据。这两种方法在直接运行任何 java 应用程序时都有效,但不能作为服务运行:(

如果我将 tomcat 作为服务运行,它会抛出一个 filenotfound,除非在尝试访问 \\nasB\myFiles$\somefile.txt 时。如果我使用 startup.bat 运行 tomcat,它可以正常访问该文件。

我无法使用userB 运行tomcat 服务,因为他无权访问webserverA。如何让我的 tomcat 服务在访问 nasB 时使用 userB 凭据?

【问题讨论】:

  • “如果我使用 startup.bat 运行 tomcat,它可以正常访问该文件” - 当您这样做时,您登录的是哪个用户?
  • userA。但正如我所指出的,他使用userB 凭据映射了nasB。另外,我在所有位置都使用 UNC,而不是地图驱动器号。

标签: java tomcat windows-services network-security


【解决方案1】:

不要尝试使用映射驱动器。

鉴于用户的配置和映射的驱动器只有在用户使用交互式登录方式登录时才可用,您将无法使用这些资源。尝试使用 UNC 路径,如果由于用户限制而不起作用,请移交 jcifs 库,在这些情况下它非常方便,因为它允许您在使用 UNC 路径访问资源时进行身份验证,从而减少不确定性关于读取网络驱动器中的文件夹和文件的能力(另外,将 tomcat 服务配置为以管理用户身份运行,提供不应过期的凭据,...)。

我自己也遇到过,这只是我个人的看法。

【讨论】:

  • 我在所有位置都使用 UNC。 JCIFS 会让我从 fileinputstream 访问带有 UNC 的驱动器吗?我将文件位置扔到使用 fileinputstream 打开文件的第三方库中。
  • JCIFS 处理身份验证并在成功时创建一个适当的实例。 AFAIk 它应该允许您读取其中的文件,因为身份验证已经正确。
【解决方案2】:

在两台 Windows 服务器上创建用户名/密码相同的 Windows 用户。 示例 userA/passA 然后使用该用户运行 Tomcat Windows 服务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 2019-08-04
    • 1970-01-01
    相关资源
    最近更新 更多