【问题标题】:How to get windows user name in java如何在java中获取windows用户名
【发布时间】:2014-05-08 15:40:27
【问题描述】:

我编写了一个 Web 应用程序,我必须使用 Windows 用户名登录。 我尝试使用 system.get property() 获取用户名,但它只提供服务器 Windows 名称的用户名。但我想要客户端系统的用户名。任何人都可以帮助我吗?

【问题讨论】:

  • 您将无法从服务器访问客户端计算机
  • 不是重复的。他希望用户在客户端机器上,这是不可能的 AFAIK
  • 您需要使用 CAS 等单点登录服务来根据 LDAP 对用户进行身份验证。只有这样,您才能访问 窗口用户名(实际上,它是由 Windows 上的 LDAP 实现的 Active Directory 检索到的)。
  • 嗨,dileep 客户端机器的意思是我告诉其他系统。
  • 简答:使用 wmic。长答案检查我的答案stackoverflow.com/a/58377194/3584693

标签: java jakarta-ee


【解决方案1】:

如果我理解正确,您想使用 Windows 凭据登录 Web 应用程序。如果是这样 - 问题是服务器机器对客户端一无所知。只有登录成功后才能提供用户信息(见Get windows username using JAVA or JSP)。

您可以将您的系统指向 Windows 系统和您的应用都将使用的某个用户存储(例如 LDAP)。在这种情况下,您将能够使用 Windows 凭据登录应用。

【讨论】:

    【解决方案2】:

    浏览器是一个基于 HTML 代码生成视图的应用程序。它不会授予对客户端计算机的访问权限。

    您可以使用request.getRemoteUser() 来获取用户名,这也只有在客户端计算机允许的情况下才有可能。

    如果您的客户端在 windows 机器上运行,您可以使用此获取用户名

    var wshshell=new ActiveXObject("wscript.shell");
    var username=wshshell.ExpandEnvironmentStrings("%username%");
    

    这是获取用户名的解决方案,但我绝不会推荐这个,这肯定是一种不好的做法。

    【讨论】:

    • 此解决方案不安全,不适用于所有浏览器。
    • @LuiggiMendoza 如果你解释一下为什么会更好..??我也可以学习错误..
    • @LuiggiMendoza 你已经添加了评论,我已经更新了我的答案,现在我认为我不应该投反对票......!!
    • IMO 这不是一个好的答案,这就是我保持反对票的原因。
    【解决方案3】:

    整个 Java 应用程序是否在服务器上运行?您的应用程序如何知道特定的客户端机器?它如何处理同时登录的用户?它如何处理没有用户名概念的原始客户端机器?

    您可以改为运行在客户端机器上调用的 Java 小程序。您可以将此信息发送到服务器进行处理。但是,您的用户很可能不喜欢这样并且不会授予the required privileges

    或者,您可以try to use JavaScript 读取用户名,以防您通过网页进行通信。我想在这种情况下强调 try 这个词,因为没有通用的功能方法,大多数用户也很可能不允许您阅读此属性。

    简而言之:用户通常不想与您共享此信息,因此您无法访问它。如果可以的话,您会发现一个很可能会得到修复的安全漏洞。而是要求您的应用程序的用户输入一个名称,以便您出于任何需要使用它。或者,如果这是一个选项,organize for example your Windows credentials 在可以通过标准化 API 访问的服务中。

    【讨论】:

      猜你喜欢
      • 2013-11-28
      • 1970-01-01
      • 2015-03-05
      • 2011-01-06
      • 2020-11-02
      • 2013-04-19
      • 1970-01-01
      相关资源
      最近更新 更多