使用模拟,我尝试读取位于网络上共享文件夹中的文件。但我收到错误“访问被拒绝”。我的源代码如下...
这对于本地资源来说效果很好。但访问网络资源时出错。线 \sever\shared bc.txt
// Create a provider that implements Windows authentication functions
IWindowsAuthProvider prov = new WindowsAuthProviderImpl();
// Login using different user
IWindowsIdentity identity = prov.logonDomainUser("abc.jim","abc.com", "Xyz@123");
IWindowsImpersonationContext context = identity.impersonate();
// Reading file using new user
readFile(); // It gives error - Access is denied
// Revert back to original logged user
context.revertToSelf();
readFile(); // It is working properly
// Cleanup the Windows identity
identity.dispose();
最后我能够通过使用 JNI 创建一个本机 C 库来解决这个问题。
使用的本机 Windows API 是
LogonUser : http://msdn.microsoft.com/en-us/library/windows/desktop/aa378184(v=vs.85).aspx
ImpersonateLoggedOnUser : http://msdn.microsoft.com/en-us/library/windows/desktop/aa378612(v=vs.85).aspx
RevertToSelf : http://msdn.microsoft.com/en-us/library/windows/desktop/aa379317(v=vs.85).aspx
代替:
// Login using different user
IWindowsIdentity identity = prov.logonDomainUser("abc.jim","abc.com", "Xyz@123");
我确实用过:
IWindowsIdentity identity = prov.logonDomainUserEx("abc.jim","abc.com","Xyz@123",2,0);
然后线程顶部的代码工作......