我正在使用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);
}
}
...
答案 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环境,做了同样的事情,并且在那儿也能正常工作。