java中的用户模拟

时间:2014-07-22 13:06:45

标签: java impersonation

使用模拟我试图在共享文件夹中读取位于网络上的文件。但我得到了错误"访问被拒绝"。我的源代码如下所示......

这适用于本地资源。但在访问网络资源时会出错。线 \服务器\共享\的abc.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();

1 个答案:

答案 0 :(得分: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