java中的用户模拟

问题描述 投票:0回答:2

使用模拟,我尝试读取位于网络上共享文件夹中的文件。但我收到错误“访问被拒绝”。我的源代码如下...

这对于本地资源来说效果很好。但访问网络资源时出错。线 \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();
java impersonation
2个回答
3
投票

最后我能够通过使用 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

0
投票

代替:

// 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);

然后线程顶部的代码工作......

© www.soinside.com 2019 - 2024. All rights reserved.