JCIFS SMB正在本地tomcat服务器上创建文件夹,而不是远程服务器



我正在使用JCIFS在Windows远程共享目录上创建一个目录。 它不会使身份验证失败,并继续调用 mkdir(( 方法。 但是,文件夹是在 linux 文件系统上创建的,位于 tomcat 安装的根目录,而不是在 Windows 共享目录中。没有任何例外。

我使用的是 JCIFS SMB 版本 1.3.19。Java 应用程序是一个 servlet,使用 Tomcat 在 Linux 盒子上运行。 进行 SMB 调用时,如代码块所示,应用会创建请求的目录,但它是在 Tomcat 安装目录的根目录中创建的。 我在调用 mkdir(( 方法之前使用 NtlmPasswordAuthentication。

public void create() {
    try {
        String smbUrl = String.format("smb://WIN-2016-AD-DNS/profiles/" + userName);
        LOGGER.info("smbUrl = " + smbUrl);
        NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(domain, "jdoe", "password");
        SmbFile dir = new SmbFile(smbUrl, auth);
        if (dir.isDirectory()) {
            LOGGER.info("Directory already exists");
        } else {
            try {
                dir.mkdir();
                LOGGER.info("Successfully created folder on share");
            } catch (Exception e) {
                logExceptionError("Failed to create Directory with SMB mkdir", e, 0);
            }
        }
    } catch (Exception e) {
        logExceptionError("Failed to create Directory with SMB", e, 0);
    }
}

我终于想通了问题所在。我将整个Tomcat服务器环境设置在Windows平台而不是Linux上,看看我是否会有更好的运气。 事实证明,我在其中一个雄猫日志中找到了一个条目......

SEVERE [ajp-nio-8009-exec-10] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [ADuser] in context with path [] threw exception [Servlet execution threw an exception] with root cause
    java.lang.ClassNotFoundException: jcifs.smb.NtlmPasswordAuthentication

我不知道为什么我的应用程序中没有捕获此异常。 所以我将jcifs库复制到Tomcats的"lib"文件夹中,重新启动Tomcat并且它起作用了。 我回到Linux环境并做了同样的事情,它在那里也有效。

最新更新