JCIFS SMB在本地tomcat服务器而非远程服务器上创建文件夹

时间:2019-07-15 18:19:45

标签: java jcifs

我正在使用JCIFS在Windows远程共享目录上创建目录。它不会使身份验证失败,而是继续调用mkdir()方法。但是,文件夹是在Tomcat安装文件夹的根目录而不是Windows共享目录的linux文件系统上创建的。没有任何异常。

我正在使用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);
    }
}

...

1 个答案:

答案 0 :(得分:0)

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

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环境,做了同样的事情,并且在那儿也能正常工作。