从Java Servlet中冒充用户

给定一个通过ProcessBuilder创build一个新进程的Java Servlet(运行在Windows服务器上),我有什么select让这个新进程以调用原始web请求到servlet的用户身份运行?

澄清,我想要的是类似的东西

ProcessBuilder pb = new ProcessBuilder("whoami"); Process p = pb.start(); // p.getOutputStream() should contain the name of the remote user, // not the user running the app server 

真正的目标是执行一些安全检查(例如,查看用户是否能够打开文件,或在内部企业系统中查看这样的logging)。

很明显,用户需要以某种方式进行身份validation,无论是通过应用程序服务器还是Java代码 – 理想情况下,我希望以某种方式使用单点login(即不需要用户input密码),并且没有问题如果解决scheme只适用于已经login到域的Windows客户端(尽pipe更好,如果这不是限制)。 我目前使用Jetty作为应用程序服务器,但如果有必要,切换到其他的东西肯定是一个可行的select。

(如果有助于澄清,我基本上想要replace当前使用IIS的模拟function的CGI脚本在发出请求的用户的上下文中运行)

Solutions Collecting From Web of "从Java Servlet中冒充用户"

项目华夫饼将得到(几乎)在那里。 它具有SSO和模拟实施。

你唯一的选择就是JNI,或者像JNA那样包装JNI。 您将需要调用O / S API来更改您的有效凭据,这也需要应用程序服务器以管理员身份运行 – 这本身就是一个重要的安全考虑因素。

我不知道Windows API的具体情况,但大多数操作系统都具有足够强大的配置文件(admin / root)来承担任何用户配置文件的身份,而不需要密码。 否则,通常获取用户配置文件令牌的唯一方法是为该配置文件提供合法的身份验证凭据。

要注意的一件事是确保您更改线程的凭据,而不是整个过程。