【问题标题】:Get windows username using JAVA or JSP [closed]使用 JAVA 或 JSP 获取 Windows 用户名 [关闭]
【发布时间】:2013-04-23 11:01:55
【问题描述】:

我想在 windows 上获取登录用户名,我的意思是用户使用 java 登录到 windows。我用了 System.getProperty("user.name"); 但我得到的是服务器名称,而不是用户。

【问题讨论】:

  • 在什么情况下?电脑?一个网络应用程序?根据文档,user.name 登录到计算机的帐户的名称。
  • 您能否详细说明您的环境?您是在谈论 Web 应用程序还是桌面应用程序?如果它的网络应用程序System.getProperty("user.name") 会给你用户登录的服务器机器。
  • 如果您在 JSP 中使用 System.getProperty("user.name"),该 JSP 部署在 Windows 下运行的 Servlet 容器中,作为具有 System 帐户的服务,您将看到主机名,因为那是系统帐户的“真实”名称。
  • 为什么每个初学者都认为 Java/JSP 在 webbrowser 而不是 webserver 中运行? Java/JSP 在网络服务器中运行并生成一堆 HTML 代码,这些代码被发送到网络浏览器。为了在 webbrowser 中运行 Java,您需要一个类似于 applet 或 webstart 的客户端应用程序(例如 Swing),您可以通过 <object> 元素将其嵌入到生成的 HTML 中。这样,网络浏览器将在自己的(沙盒!)环境中下载并运行它。

标签: java jsp


【解决方案1】:

获取登录到您的 Web 应用程序的用户的名称(我认为这是您想要做的,基于您的 cmets)完全取决于您在系统中实现身份验证的方式。但是,如果您的登录机制添加了此信息,则用户名可能在 request.getRemoteUser()request.getUserPrincipal() 中可用。但如前所述,这一切都取决于。否则,您的身份验证机制可能会暴露这一点,但我们需要更多信息来提供帮助。

System.getProperty("user.name") 只会给你运行 java 进程的用户的用户名。

【讨论】:

  • 如果您使用 waffle 过滤器,它会将正确的用户凭据添加到请求中。请参阅github.com/dblock/waffle 了解更多信息。
  • 太棒了!如果使用的是 Kerberos/NTLM,则可能会这样做。
  • @tstorms:我不知道你为什么删除你的答案。到目前为止,这是真正解决问题的唯一合理尝试。然而,Waffle 文档非常模糊。 Java 有许多支持 NTLMv1 的 NTLM 身份验证模块,但 AFAIK 不支持 NTLMv2。你知道 Waffle 是否也支持 NTLMv2? NTLMv1 在许多 Windows 域中被禁用是有充分理由的。
  • 是的,我正在使用 Kerberos 进行单点登录。但是我如何从 Kerberos 获取它。
  • 我知道,我的答案已被删除。有些管理员太勤奋了...要回答您的问题,是的,waffle 支持 NTLM 2 开箱即用。
猜你喜欢
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 2015-05-27
  • 1970-01-01
  • 2013-11-28
  • 1970-01-01
  • 1970-01-01
  • 2011-01-19
相关资源
最近更新 更多